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 +进程号
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。