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