本文为网上查询资料,修改作为笔记记载,
为什么用 redis 不用 memcached?
memcached存放数据无法持久化(将数据写到硬盘中)。
redis数据也是存放到内存中,所以速度快。并且数据可以周期性写到硬盘中,Redis数据可以持久化。
Redis有五种数据类型
字符串(string)、list(链表)、set(集合)、zset(有序集合)、hash(哈希)
PHP操作redis
一、连接
$redis = new Redis();
$redis->connect('127.0.0.1',6379,1); //短链接,本地host,端口为6379,超过1秒放弃
$redis->pconnect('127.0.0.1',6379,1); //长链接,本地host,端口为6379,超过1秒放弃
$redis->ping(); //检查是链接,返回 pong即是连接
$redis->select(0); //选择redis库,0~15 共16个库,默认选择库是 0
$redis->close();//释放资源
二、string
$redis->set('test','aa'); //设置 键 key = 'test',值 value = 'aa'
$redis->get('test'); //获取 test 的 值
$redis->delete('test'); // 删除test 键
$redis->setnx('test','aa');//如果test键不存在,则设置,如果test键存在,则无效。
$redis->mset($arr); //传入$arr为数组,设置一个或多个键值
$redis->mget($arr);//传入$arr为数组,获取一个或多个值,以数组形式返回
$redis->getset($arr); //先获取值,再覆盖设置值 ,返回旧值
三、list栈
$redis->lpush('list','val'); //(增) 在列表list的表头增加一个值val
$redis->rpush('list','val'); //(增) 在列表list的表尾增加一个值val
$redis->lpop('list'); //(删) 删除 并返回列表list 的表头一个值
$redis->rpop('list'); //(删) 删除 并返回列表list 的表尾一个值
$redis->ltrim('list',0,2); //(删)只保留下标为0到第2个的值,其他删除
$redis->lrem('list','val',1) //(删) 删除列表list 里面 的 val 值 1次
$redis->lset('list',2,'val') //(改) 将 列表list 下标为2的值改为 val
$redis->lindex('list',1);(查) 返回 列表 list 的下标为1 的值
$redis->lrange('list',0,3);(查) 以数组形式返回 列表 list 的下标为 0到3的值
四、set(string类型的无序集合。是通过hash table 实现的,添加、删除和查找的复杂度都是0(1)。
对集合我们可以取并集、交集、差集)
$redis->sadd('key','value1','value2','valuen'); //为key集合添加 多个或一个元素
$redis->smembers('key'); //返回集合key 所有元素
$redis->sinter('key1','key2','keyn');//返回所有给定集合的交集
$redis->sunion('key1','key2','keyn');//返回所有给定集合的并集
$redis->sdiff('key1','key2','keyn');//返回所有给定集合的差集
$redis->srandmember('key');//返回集合一个随机元素
$redis->srem('key','value1','value2'); //为key集合删除多个值或一个元素
$redis->spop('key') //移除并返回集合中的一个随机元素
$redis->sismember('key','member') //判断集合key是否有member元素
五、 zset(有序集合)
$redis->zAdd('key',1,'aa'); //在key集合添加与 1关联 元素aa ,集合元素不可重复,可一次添加多个 zAdd('key',1,'aa',2,'bb')
$redis->zrange('key',0,1); //获取集合元素,从 0 到 1
$redis->zdelete('key','aa');删除key集合里面的 aa元素
$redis->zRevRange('key',0,1,true); // 获取集合元素,从0位置 到 -1 位置,数组按照score降序处理 返回score关联数组
$redis->zRangeByScore('key',0,0.2); //获取score 在0到0.2的元素
$redis->zCount('key',1,10) //计算 score 1到10的元素
$redis->zRemRangeByScore('key',1,3); //删除Score区间 1到3
$redis->zRemRangeByRank('key',0,1); //删除下标 区间0到1
$redis->zSize('key'); //返回key有序集合 有多少个元素
$redis->zScore('key','a'); //返回key集合中 a元素对应的score值
$redis->zRange('key','a');//返回key集合中 a元素对应的下标值
$redis->zIncrBy('key',1.5,'a'); //将集合key中的元素a的score值加1.5
$redis->zUnion('union',array('key','key2')) //将集合key和key2合并于集合union,如有重复,则重复元素score值相加
$redis->zUnion('union',array('key',key2),arrar(4,2)); // 将key元素的score值乘4,key2元素score值乘2,然后合并,重 复元素则score相加
$redis->zUnion('union',array('key',key2),arrar(4,2),'MAX'); // 如有重复,则score取最大,也可以设置最小值MIN
$redis->zInter('new',array('k1','k2')); //取k1 k2 的交集于 new,安装score值排序,如元素种复,则score值相加
$redis->zInter('new',array('k1','k2'),array(4,2),'MAX'); //k1每个元素乘4,k2每个元素乘2,取交集 于new,重复元素则取最大值(也可MIN最小值)
五、哈希(Hash)
$redis->hSet('key','name','val);//为key添加 名字为name,值为 val
$redis->hMSet('key',array('aa'=>'aaa','bb'=>'bbb'));//批量设置添加
$redis->hSetNx('key','name','val');//为key添加 名字为name,值为 val ,存在则返回false
$redis->hGet('key','name');//获取key表的 name 里面的值
$redis->hMGet('key,array('aa','bb'));//批量获取name字段的值
$redis->hLen('key');//获取key表里面的字段数
$redis->hDel('key','name');//删除字段name
$redis->hKeys('key');//获取key表所有字段
$redis->hVals('key');//获取key表所有字段的值
$redis->hGetAll('key’);//获取key所有字段和值(关联数组)
$redis->hExists('key','name');//判断key是否含有name字段
$redis->hIncrBy('key','name',-2);//为key里面的字段name 的值 -2,如果非数组,则返回false
$redis->hIncrByFloat('key','name',-2.5);//为key里面的字段name 的值 -2.5(浮点数),如果非数组,则返回false