Predis
是php
连接Redis
的操作库,支持已知的所有Redis
客户端命令,由于项目中用来处理session
和数据缓存,简单整理一下
安装
1 | composer require predis/predis |
使用
如果在连接时不加任何参数,默认会把127.0.0.1
和6379
作为默认的host
和port
并且连接超时时间是5
秒,以下几种声明方式均可1
2
3
4
5
6
7
8
9
10
11
12// 默认连接
$redis = new Predis\Client();
// 数组形式
$redis = new Predis\Client([
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
]);
// URI 形式:
$redis = new Predis\Client('tcp://127.0.0.1:6379');
Client
的更多配置参数可以通过第二个参数传进去1
2
3
4$client = new Predis\Client(
$connection_parameters,
['profile' => '2.8', 'prefix' => 'sample:']
);
Redis
会给所需要的参数默认值,参数主要有:
- profile: 针对特定版本的配置,因为不同版本对同样操作可能有差异
- prefix: 自动给要处理的
key
前面加上一个前缀 - exceptions:
Redis
出错时是否返回结果 - connections: 客户端要使用的连接工厂
- cluster: 集群中使用哪个后台 (
predis
,redis
或者客户端配置) - replication: 主/从中使用哪个后台 (
predis
或者客户端配置) - aggregate: 合并连接方式 (覆盖
cluster
和replication
)
以下是常用的操作方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65// 普通set/get操作
$redis->set('library', 'predis');
$redis->get('library'); // 'predis'
// del 删除
$redis->del('foo');
// setex set一个存储时效
$redis->setex('str', 10, 'bar'); // 表示存储有效期为10秒
// setnx/msetnx 相当于add操作,不会覆盖已有值
$redis->setnx('foo',12); // true
$redis->setnx('foo',34); // false
// getset操作,set的变种,结果返回替换前的值
$redis->getset('foo',56); // 返回34
// incrby/incr/decrby/decr 对值的递增和递减
$redis->incr('foo'); // foo为57
$redis->incrby('foo',2); // foo为59
// exists检测是否存在某值
$redis->exists('foo'); // true
// type 类型检测,字符串返回string,列表返回list,set表返回set/zset,hash表返回hash
$redis->type('foo'); // 不存在,返回none
$redis->set('str','test');
$redis->type('str'); // 字符串,返回string
// append 连接到已存在字符串
$redis->append('str','_123'); // 返回累加后的字符串长度8,此进str为 'test_123'
// setrange 部分替换操作
$redis->setrange('str',0,'abc'); // 返回3,参数2为0时等同于set操作
$redis->setrange('str',2,'cd'); // 返回4,表示从第2个字符后替换,这时'str'为'abcd'
// substr 部分获取操作
$redis->substr('str',0,2); // 表示从第0个起,取到第2个字符,共3个,返回'abc'
// strlen 获取字符串长度
$redis->strlen('str'); // 返回4
// setbit/getbit 位存储和获取
$redis->setbit('binary',31,1); // 表示在第31位存入1,这边可能会有大小端问题?不过没关系,getbit 应该不会有问题
$redis->getbit('binary',31); // 返回1
// keys 模糊查找功能,支持*号以及?号(匹配一个字符)
$redis->set('foo1',123);
$redis->set('foo2',456);
$redis->keys('foo*'); // 返回满足条件的键值对数组 ['foo1', 'foo2']
$redis->keys('f?o?'); // 同上
// randomkey 随机返回一个key
$redis->randomkey(); // 可能是返回 'foo1'或者是'foo2'及其它任何一存在redis的key
// rename/renamenx 对key进行改名,所不同的是renamenx不允许改成已存在的key
$redis->rename('str','str2'); // 把原先命名为'str'的key改成了'str2'
// expire设置key-value的时效性,ttl获取剩余有效期,persist重新设置为永久存储
$redis->expire('foo', 1); // 设置有效期为1秒
$redis->ttl('foo'); // 返回有效期值1s
$redis->expire('foo'); // 取消expire行为
// dbsize 返回redis当前数据库的记录总数
$redis->dbsize();