1

1.代码示例

<?php
namespace extend\drive;

use \Redis;
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 16-10-6
 * Time: 下午2:27
 */
class RedisCache
{
    protected static $_instance = null;
    private $rCache;
    const CACHE_KEY = 'redisDefaultKey2016';

    /**
     * 单例模式
     * @author mmy
     * @param $dbHost
     * @param $port
     * @return RedisCache|null
     */
    public static function getInstance($dbHost, $port)
    {
        if(self::$_instance === null)
        {
            self::$_instance = new self($dbHost,$port);

        }
        var_dump(self::$_instance);
        return self::$_instance;
    }

    /**
     * 构造函数
     * @author mmy
     * @param string $host
     * @param string $port
     */
    public function __construct($host='127.0.0.1',$port='6379')
    {
        if($this->rCache)
        {
            return $this->rCache;
        }
        $this->rCache = new Redis();
        $this->rCache->connect($host,$port);
    }

    /**
     * 获取key值
     * @author mmy
     * @param $key
     * @return bool|string
     */
    public function get($key)
    {
        $res = md5(static::CACHE_KEY.$key);
        return $this->rCache->get($res);
    }

    /**
     * 设置key值方法
     * @author mmy
     * @param $key
     * @param $value
     * @param int $timeout
     * @return bool
     */
    public function set($key,$value,$timeout=0)
    {
        $key = md5(static::CACHE_KEY.$key);
        if($timeout===0)
        {
            $res = $this->rCache->set($key,$value);
        }
        else
        {
            $res = $this->rCache->set($key,$value,$timeout);
        }
        return $res;
    }

    /**
     * 队列插入值
     * @author mmy
     * @param $key
     * @param $string
     * @param int $limit
     */
    public function push($key,$string,$limit = 0)
    {
        $key = md5(static::CACHE_KEY.$key);
        $result = $this->rCache->lPush($key,$string);
        //执行lTrim方法 保证队列中只有$limit条数据
        if($limit>1)
        {
            $result = $this->rCache->lTrim($key,0,$limit);// 0:从最先进的数据开始算,-1:从最后进的数据计算
        }

        return $result;
    }

    /**
     * 获取消息列表内容
     * @author mmy
     * @param $key
     * @return array
     */
    public function range($key)
    {
        $key = md5(static::CACHE_KEY.$key);
        return $this->rCache->lRange($key,0,-1);
    }


}

2.检测

 $rest = $redis->push($message_data['userid'],$message_data['name']);
                echo '-----------------------';
                 print_r( $redis->range($message_data['userid']));
                echo $rest;

图片描述

3.redis linux

1》Linux下安装Reids
http://redis.io/download

wget http://download.redis.io/releases/redis-3.0.1.tar.gz 下载
tar -xzvf redis-3.0.1.tar.gz 解压
cd redis-3.0.1 进入解压目录
make 编译 安装
make install

2》在bin下可执行的程序
redis-server:Redis服务器
redis-cli:命令行客户端
redis-benchmark:Redis的性能测试工具
redis-check-aof:AOF文件修复工具
redis-check-dump:RDB文件检测工具

redis.conf是Redis的配置文件
将配置文件中daemonize yes 以守护进程的方式来使用

3》启动和停止Redis

直接启动
    redis-server
    redis-server /ect/redis.conf
停止Redis
    shutdown
    结束Redis的进程也可以

aof,rdb是两种 Redis持久化的机制。用于crash(崩溃)后,redis的恢复。

aof:Append-only file
        将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或
者即将写入),才进行实际的数据变更,“日志文件”保存了历史所有的操作过程;当server需要数据恢复时,可以直接
replay此日志文件,即可还原所有的操作过程。AOF相对可靠,它和MySQL中bin.log、pache.log、zookeeper中txn-log简直异曲同工。AOF文件内容是字符串,非常容易阅读和解析。 

rdb:

RDB默认开启,redis.conf中的具体配置参数如下;

#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./
##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
##可以通过“save “””来关闭snapshot功能  
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个
key60s进行存储。
save 900 1
save 300 10
save 60 10000
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常
等  
stop-writes-on-bgsave-error yes  
##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短
的网络传输时间  
rdbcompression yes 
客户端使用命令进行持久化save存储:

./redis-cli -h ip -p port save
./redis-cli -h ip -p port bgsave
aof优缺点:

    优点:
       可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。 
    缺点:
       AOF文件比RDB文件大,且恢复速度慢。
    
rdb优缺点:
   RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 

优点:
   使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能 
缺点:
   RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
    
1) AOF更加安全,可以将数据更加及时的同步到文件中,但是AOF需要较多的磁盘IO开支,AOF文件尺寸较大,文件内
容恢复数度相对较慢。 
2) snapshot,安全性较差,它是“正常时期”数据备份以及master-slave数据同步的最佳手段,文件尺寸较小,恢复
数度较快。

redis 其他端口开放服务

/etc/init.d/redis-server-------------redis的可执行程序
/etc/redis/redis.conf----------------redis的配置文件
/usr/bin/redis-server---------------redis的自启动文件

如果是单实例运行redis的话,那么到这里就不需要关心了,如果你想运行多个redis的实例,那么就需要对redis文件进行操作。
首先我们要知道redis一个实例就是一个节点,每个节点分配一个端口号,每个节点对应一个redis.conf配置文件。
redis默认配置的端口号是6379,假设现在要多配置一个6380,我们可以直接复制redis.conf命名为redis6380.conf,并且编辑配置文件
cp /etc/redis/redis.conf /etc/redis/redis6380.conf

vi /etc/redis/redis6380.conf
需要修改几个参数
pidfile /var/run/redis/redis6380-server.pid
port 6380

logfile /var/log/redis/redis6380-server.log

dbfilename dump6380.rdb

然后保存,直接启动这个配置文件就行了
redis-server /etc/redis/redis6380.conf

我们可以查看下进程
ps auxf | grep redis-server

杀掉进程 
kill -9 +进程号

mmy123456
376 声望17 粉丝

有项目请联系:15201970281(毛毛)