PHP操作Redis

这里主要是用的predis

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php

$redis = new redis();
$redis->connect('127.0.01', '6379') || die('Connect failed');
$redis->auth('admin'); // 授权

//**********************Key(键)******************************

$redis->keys('*'); //返回所有key
$redis->keys('s*'); //返回所有s开头的key
$redis->exists('key'); //判断该key是否存在
$redis->del('key'); //删除该key
$redis->expire('key', 3600); //设置key 过期时间3600s
$redis->ttl('key'); //查看过期剩余时间s
$redis->select('db_index'); //选择数据库
$redis->set('key', 'val'); //设置key=>value
$redis->get('key'); //根据key获取value
$redis->move('key', 'db_index_2'); //把key移到另一个数据库
$redis->persist('key'); //移除过期时间
$redis->randomKey(); // 随机返回一个key
$redis->type('key'); //获取key类型
$redis->dbSize(); //获取数据库key个数
$redis->info(); //获取redis服务信息
$redis->echo('hello world'); //输出函数

//**********************Key(键)******************************

//**********************string类型***************************
// String 是最简单的类型,一个Key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象

$redis->set('test', 1024); //赋值
$redis->mset(array('key0'=>'val0','key1'=>'val1')); //批量赋值
$redis->mget(array('key0', 'key1')); //批量获取值
$redis->setnx('key', 'val'); //设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思
$redis->msetnx(array('key0' => 'val0', 'key1' => 'val1')); //全部成功返回1,否则失败一个也返回0
$redis->getSet('key', 'new_val'); //getSet设置key的值,并返回key的旧值
$redis->setex('key', 10, 'val10'); //带生存时间的写入值单位s
$redis->setRange('key', 0, 'hello'); //设置子字符串替换,key,开始位置,替换值
$redis->getRange('key', 0, 2); //getRange获取子字符串,getRange key start end
$redis->ttl('key'); //获取key的生存时间,没设置的为-1
$redis->keys('*a*'); //获取所有key,也可获取具体key,模糊匹配key
$redis->get('key'); //根据key获取value
$redis->getMultiple(array('key1', 'key2', 'key3')); //批量根据key获取value
$exits = $redis->exists('key'); //判断key是否存在。存在 true 不存在 false
$redis->delete('key1', 'key2'); //删除,可删除多个
$redis->delete(array('key3', 'key4', 'key5')); //删除多个
$redis->delete($redis->keys('*')); //传数组,删除所有key
$redis->incr('key'); //自增,默认值1
$redis->incrBy('key', 10); //必须给定参数值
$redis->decr('key'); //自减,默认值1
$redis->decrBy('key', 10); //必须给定参数值
$redis->append('key', 'append_val'); //给指定的key的字符串追加value,返回新字符串的长度
$redis->strlen('key'); //获取指定key的字符串长度

//**********************string类型***************************

//**********************hash类型*****************************
// Redis hash是一个string类型的field和value的映射表。它的添加删除都是0(1)
// hash特别适合用于存储对象。相对于将对象的每个字段存成单个string类型。
// 将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。

$redis->flushAll(); //清空所有数据库
$redis->flushDB(); //清空当前数据库

$redis->hSet('key', 'hash_key', 'val'); //单个设置
$redis->hGet('key','hash_key'); // 单个获取
$redis->hSetNx('key', 'hash_key', 'val'); //设置hash field 为指定的值value,如果field已经存在,返回0,nx是not exist的意思
$redis->hMset('key', array('a'=>1, 'b'=>2, 'c'=>3)); //批量设置
$redis->hMGet('key', array('a','b','c')); //批量获取
$redis->hIncrBy('key', 'hash_key', 'val'); //设置hash field 添加key和value
$redis->hExists('key', 'hash_key'); //测试hash field 存在1,不存在0
$redis->hLen('key'); //返回hash 里所有的 field 的数量
$redis->hDel('key', 'hash_key'); //删除指定hash的field
$redis->hKeys('key'); //返回hash 所有 field
$redis->hVals('key'); //返回hash 所有 field values
$redis->hGetAll('key'); //获取hash中全部的field和value

//**********************hash类型***************************

//**********************list链表***************************
// 栈先进后出;队列先进先出;
// List 是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等,操作中key理解为链表的名字。
// Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素,这样LIST既可以作为栈,又可以作为队列。

$redis->lRange('key', 'start', 'end'); //取链表list 从start位开始取到最后位置;start代表头 end代表尾
$redis->lPush('key', 'val'); //在key对应的list的头部添加字符串元素
$redis->rPush('key', 'val'); //在key对应的list的尾部添加字符串元素
$redis->lPop('key'); //在key对应的list的头部删除字符串元素,并返回删除字符
$redis->rPop('key'); //在key对应的list的尾部删除字符串元素,并返回删除字符
$redis->lRem('key', 'val', 'n'); //在list中删除N个和value相同的元素(n<0从尾删除,n=0全部删除),返回的值为删除的个数
$redis->lSet('key', '-1', 'val'); //设置list中指定下标的元素值 lSet(list,位置,值),位置可以从头或者从尾
$redis->lIndex('key', 0); //返回list中index位置的元素
$redis->lLen('key'); //返回list的长度
$redis->lTrim('key', 'start_0', 'end_-1'); //保留指定key的值的范围内的数据 0为头 -1为尾
$redis->lInsert('key', 'position', 'pivot', 'val'); //将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
$redis->rpoplpush('srcKey', 'dstKey'); //从第一个LIST的尾部移除元素并添加到第二个LIST的头部

//**********************list链表***************************


//**********************set集合****************************
// Set是集合,它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找的复杂程度都是0(1)
// 对集合我们可以取并集,交集,差集。通过这些操作我们可以实现SNS中的好友推荐和blog的tag功能

$redis->sAdd('key', 'val1', 'val2'); //向集合中添加元素
$redis->sMembers('key'); //集合元素列表
$redis->sRem('key', 'member1', 'member2'); //集合移除元素
$redis->sPop('key'); //随机删除集合元素并返回删除的元素。删除最后一个元素时,则集合也被删除
$redis->sDiff('key1', 'key2'); //取多个集合的差集,谁在前面已谁为标准(差集就是前面第一个集合有而后面所有集合都没有)
$redis->sDiffStore('dstKey', 'key1', 'key2'); //返回多个集合的差集,存在第三个集合里面
$redis->sInter('key1', 'key2'); //交集(所有集合都有的元素)
$redis->sInterStore('dstKey', 'key1', 'key2'); //取多个集合的交集,存在第三个集合里面
$redis->sUnion('key1', 'key2'); //并集(所有集合合并去重的元素)
$redis->sUnionStore('dstKey', 'key1', 'key2'); //取多个集合的并集,存在第三个集合里面
$redis->sMove('srcKey', 'dstKey', 'member'); //第一个集合元素剪切到第二个集合里面
$redis->sCard('key'); //返回集合中元素的个数
$redis->sIsMember('key', 'val'); //判断某个元素是否为集合的元素
$redis->sRandMember('key', 'count_num'); //随机返回集合内的一个元素,不会删除元素

//**********************set集合***************************


//**********************set有序集合***************************
//**********************set有序集合***************************


//**********************其他***************************

//string来存储用户的最大id,用来id的自增
//hash 表来存储用户的详细信息
//list链表结构来存储用户的id号
$uid = $redis->incr('blog:id'); //自增长
$res = $redis->hMset('blog:user:' . $uid, array('id' => $uid, 'username' =>'admin'.time() . time(), 'password' => md5(time()))); //hash表插入一条记录
$redis->rPush('blog:uid', $uid);

$res = $redis->hGetAll('blog:user:' . $uid);
$redis->del('blog:user:' . $uid); //删除用户
$redis->lRem('blog:uid', $uid, 'count'); //删除链表中的id

$count = $redis->lSize('blog:uid'); //返回名称为key的list有多少个元素
$page_size = 3;
$page_num = !empty($_GET['page']) ? $_GET['page'] : 1;
$page_count = ceil($count / $page_size);
$ids = $redis->lrange("blog:uid", ($page_num - 1) * $page_size, (($page_num - 1) * $page_size + $page_size - 1));

foreach ($ids as $v) {
$result[] = $redis->hgetall("blog:user:" . $v); //获取记录
}
echo"<pre>";
print_r($result);

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :