备注:redis及phpredis扩展安装请查看:PHP典型功能与Laravel5框架开发学习笔记
redis具有原子性,所以在高并发情况下确保数据的一致性
一、连接
$redis = new Redis(); $redis->connect('127.0.0.1', 6379);
一、key-value
1、选择数据库
$redis->select(2);
2、设置:set
$redis->set('name', 'jimu');
3、获取:get
$redis->get('name');
4、删除:del
$redis->del('name');
5、判断键是否存在:exists
$redis->exists('name');
6、如果键值不存在则设置,存在则不做任何操作:setnx(SET if Not eXists)
$redis->setnx('age', 22);
7、自增、自减:incr、decr、incrBy、decrBy
$key = 'libdata:pv'; $redis->incrBy($key, 3);
$key = 'libdata:pv'; $redis->decrBy($key, 1);
8、键名一般按照模块从大到小来设计,以冒号分隔,如user:info:1,这样的好处是层级关系清晰,客户端显示如下
二、hash,以下方法和key-value的方法一一对应
1、hSet
$redis->hSet('user:a', 'age', 20);
2、hGet
$redis->hGet('user:a', 'age');
3、hDel
$redis->hDel('user:a', 'age');
4、hExists
$redis->hExists('user:a', 'age');
5、hSetNx
$redis->hSetNx('user:a', 'age', 23);
三、list
1、lPush、rPush
// 先队列头添加数据 $redis->lPush('list', 0); // 先队列尾添加数据 $redis->rPush('list', 2);
2、lPop、rPop
// 先队列头取出数据 $redis->lPop('list'); // 先队列尾取出数据 $redis->rPop('list');
3、lSet:给指定的索引赋值
$redis->lSet('list', 0, 10);
4、lLen:获取数组的长度
$len = $redis->lLen('list');
5、lRange:获取索引从1到索引3的值
$res = $redis->lRange('list', 1, 3); var_dump($res);
6、lTrim:删除选中范围外的数据,返回bool值
$redis->lTrim('list', 1, 3);
执行前数据:
执行后:
四、set:特点:无序、键值不重复
1、sAdd:
$redis->sAdd('fruit', 'apple'); $redis->sAdd('fruit', 'banana'); $redis->sAdd('fruit', 'watermelon'); $redis->sAdd('fruit', 'watermelon');
2、sMembers:返回集合的所有成员
$res = $redis->sMembers('fruit');
3、sCard:返回成员个数
$num = $redis->sCard('fruit');
4、sPop:随机取出一个成员
$fruit = $redis->sPop('fruit');
5、sDiff:求差集,及第一个集合中有而其他集合中没有的成员
$fruit1 = $redis->sAdd('fruit:1', 'apple'); $fruit1 = $redis->sAdd('fruit:1', 'banana'); $redis->sAdd('fruit:2', 'banana'); $redis->sAdd('fruit:2', 'watermelon'); $diff = $redis->sDiff('fruit:1', 'fruit:2'); var_dump($diff);
五、发布订阅
1、监听者代码:sub.php
<?php // 监听者 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "reading c1 c2... "; $redis->setOption(Redis::OPT_READ_TIMEOUT, -1); // 设置不超时 $redis->subscribe(['c1', 'c2'], function(Redis $instance, $channel, $message) { echo "recieve message from {$channel}: {$message} "; });
2、发布者代码:pub.php
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $num = $redis->publish('c1', 'hi, c1'); // 返回监听者的个数 echo "client:{$num} "; $num = $redis->publish('c2', 'hi, c2'); // 返回监听者的个数 echo "client:{$num} ";
3、执行及显示:
3.1、先开启监听者:
3.2、发布消息:
3.3、监听者收到消息: