使用Predis操作Redis

Predisphp连接Redis的操作库,支持已知的所有Redis客户端命令,由于项目中用来处理session和数据缓存,简单整理一下

安装

1
composer require predis/predis

使用

如果在连接时不加任何参数,默认会把127.0.0.16379作为默认的hostport并且连接超时时间是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: 合并连接方式 (覆盖clusterreplication)

以下是常用的操作方法

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();

文章目录
  1. 1. 安装
  2. 2. 使用
|