PHP 操作 Redis
- Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
 - Redis 将数据库完全保存在内存中,仅使用磁盘进行持久化。所以可以实现非常高的读写操作;
 - Redis 跟其他键值存储的数据相比,具有丰富的数据类型。
 - Redis 可以将数据复制到任意的从机中。
 - 在一些需要大容量数据集的应用,Redis也并不适合,因为它的数据集不会超过系统可用的内存。所以如果你有大数据应用,而且主要是读取访问模式,那么Redis并不是正确的选择。
 
PHP 操作 Redis 基本步骤如下:
- 实例化 Redis 对象 
$redis = new Redis();; - 连接 Redis 服务器 
$redis->connect('127.0.0.1', 6379);; - 设置 Redis 模式;
 - 进行基本的操作;
 
1  | //创建redis实例  | 
返回类型
1  | Redis::REDIS_STRING - String  | 
string 操作
Strings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字,除了一般的set,get之外还有以下功能:
- 获取字符串长度
 - 往字符串append内容
 - 设置和获取字符串的某一段内容
 - 设置及获取字符串的某一位(bit)
 - 批量设置一系列字符串的内容
 
string 操作用到的命令有:getSet append getRange setRange strlen getBit/setBit incr, incrBy decr, decrBy get set setex setnx delete mset mget
使用场景
- 计数
 
Example-1
1  | 
  | 
list 操作
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。Redis还提供了操作Lists中某一段的api,你可以直接查询,删除Lists中某一段的元素。
list 操作用到的命令有(以l开头):
lPush/rPush lPushx/rPushx lPop/rPop blPop/brPop lSize lIndex, lGet lSet lRange, lGetRange lTrim, listTrim lRem, lRemove lInsert rpoplpush
使用场景
- 显示最新的项目列表
 - 删除与过滤
 
Example-2
1  | 
  | 
set 操作
Set 集合的概念就是一堆不重复值的组合。
当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis 还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能。
set 操作用到的命令有(以s开头):sAdd sRem, sRemove sMove sIsMember, sContains sCard, sSize sPop sRandMember sInter sInterStore sUnion sUnionStore sDiff sDiffStore  sMembers, sGetMembers
使用场景
- 特定时间内的特定项目
 - 删除与过滤
 
Example-3
1  | 
  | 
zset (sorted set)操作
Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构。
zset 操作用到的命令有(以z开头):zAdd zDelete, zRem zRange zRevRange zRangeByScore, zRevRangeByScore zCount zRemRangeByScore, zDeleteRangeByScore zSize, zCard zScore zRank, zRevRank zIncrBy zUnion/zInter
使用场景
- 排行榜相关
 - 按照用户投票和时间排序
 - 处理过期项目
 - 社交关系
 
Example-4
1  | 
  | 
hash 操作
Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。
Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现:
- 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap;
 - 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
 
hash 操作用到的命令有(以h开头):hSet hGet hLen hDel hKeys hVals hGetAll hIncrBy hExists hMset hMget
使用场景
- 消息通知
 
Example-5
1  | 
  | 
Redis 操作
事务模式:
multi, exec, discard分别是开启事务,执行事务,取消事务清除数据库
a. 清除当前数据库flushDB
b. 清除所有数据库flushAll随机返回key
randomKey选择一个数据库
select转移一个 key 到另一个数据库
move查看数据库有多少key
dbSize使用 AOF 进行数据持久化
bgrewriteaof选择从服务器
saveof数据保存到磁盘
a. 同步保存到磁盘save
b. 异步保存到磁盘bgsave返回 Redis 的版本信息
info