Maxbad`Blog

Redis

2020-09-19 · 7 min read

官方命令手册:https://oss.redislabs.com/redisearch/Commands.html
中文手册:https://www.php.cn/redis/redis-commands.html
命令参考:http://doc.redisfans.com/index.html
命令手册1:https://www.redis.net.cn/order/
命令手册2:https://www.redis.com.cn/commands/

角色 redis.conf 权限说明
超户 requirepass 所有功能
普通 requireuserpass 不能进程管理类命令,如shutdown
只读 requirereaduserpass 在普通用户基础上,进一步限制只能进行读操作,没有script命令权限

普通用户不能进行的操作有:

命令 解释
INFO commandstats 查看所有命令统计
CONFIG RESETSTAT 重置统计
save SAVE命令执行一个同步保存操作,将当前Redis实列的所有数据快照(snapshot)以RDB文件的形式保存到硬盘
bgsave 在后台异步(Asynchronously)保存当前数据库的数据到磁盘
bgrrwriteaof 执行一个AOF文件重写操作,重写会创建一个当前AOF文件的体积优化版本,即使BGREWRITEAOF执行失败,也不会有任何数据丢失,因为旧的AOF文件在BGREWRITEAOF成功之前不会被修改
shutdown 停止所有客户端,如果有至少一个保存点在等待,执行SAVE命令,如果AOF选项被打开,更新AOF文件,关闭Redis服务器(server)
sync 用户复制功能(replication)的内部命令
psync 用户复制功能(replication)的内部命令
replconf 暂无用处
monitor 实时打印出Redis服务器收到的命令,调试专用
slaveof SLAVEOF命令用户在Redis运行时动态地修改复制(replication)功能的行为
debug 调试命令
config 配置参数
restore 反序列化给定的序列化值,并将它和给定的KEY关联
migrate 将key原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功,KEY保证会出现在目标实例上,而当前实例上的KEY会被删除
dump 序列化给定KEY,并返回被序列化的值,使用restore命令可以将这个值反序列化为Redis键
命令 解释
查看锁定IP config get lockedips
解锁单个IP config set unlockips 10.67.147.111
解锁所有IP config set unlockips “all”

string类型

字符串常见操作

命令 解释
set key value 存入键值对
mset key value [key value…] 批量存储字符串键值对
setnx key value 存入一个不存在的字符串键值对
get key 获取一个字符串
mget key [key…] 批量获取字符串键值
del key [key…] 删除一个键
expire key seconds 设置一个键的过期时间(秒)

原子加减

命令 解释
incr key 将key中存储的数字值加一
decr key 将key中存储的数字值减一
incr by key increment 将key中所存储的值加上increment
decr by key decrement 将key所存储的值减去decrement

string应用场景

计数器
文章计数器 阅读量 incr article:num

分布式锁

命令 解释
setnx product true 返回1代表获取锁成功
setnx product true 返回0代表获取锁失败
del product 执行完业务释放锁

hash类型

hash常用操作

命令 解释
hset key field value 存储一个哈希key的键值
hsetnx key field value 存储一个不存在的哈希表key的键值
hmseet key field value[field value…] 在一个哈希表key中存储多个键值对
hget key field 获取哈希表key对应的field的值
hmget key field[field…] 批量获取哈希表key中多个field的值
hdel key field [field…] 删除哈希表key中的field的键值
hlen key 返回哈希表key中的field的数量
hgetall key 返回哈希表key中所有的键值
hincrby key field increment 为哈希表key中field键的值加上增量increment

hash应用场景

对象缓存
hmset user userid1:name value userid1:age 14
购物车
hmset user product1:name value prodeuct1:num value

hash优缺点

  • 优点
    同类数据归类整合存储,方便数据管理
    相比string操作消耗内存与cpu更小
    相比string存储更节省空间
  • 缺点
    过期功能不能使用在field上,只能使用在key上
    Redis集群架构下不适合大规模使用

list类型

list常用操作

命令 解释
lpush key value[value…] 将一个或多个值value插入到key列表的表头(最左边)
rpush key value[value…] 将一个或多个value插入到key列表的表尾(最右边)
lpop key 移除并返回key列表的头元素
rpop key 移除并返回key列表的尾元素
lrange key start stop 返回列表key中指定区间内的元素,区间以偏移量start和stop指定
blpop key [key…] timeout 从key列表表头弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待
brpop key [key…] timeout 从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待

list应用场景

栈(stack)
lpush + lpop —>FILO
队列(queue)
lpush + rpop
阻塞队列(Blocking MQ)
lpush + brpop
微博微信消息流
使用lpush放入用户ID消息,然后使用lrange 来获取消息

set类型

set常用操作

命令 解释
sadd key member [member…] 往集合key中存入元素,元素存在则忽略,若key不存在则创建
srem key member[member…] 从集合key中删除元素
smembers key 获取集合key中的所有元素
scardkey 获取集合key中的元素的个数
sismemver key member 判断member元素是否存在于集合key中
srandmember key [count] 从集合key中选出count个元素,元素不从key中删除
spop key [count]//从集合key中选出count个元素,元素从key中删除

set运算操作

命令 解释
sinter key [key…] 交集运算
sinterstore destination key [key…] 交集结果存入新集合destination中
sunion key [key…] 并集运算
sunionstore destination key [key…] 并集结果存入新集合destination中
sdiff key [key…] 差集运算
sdiffstore destination key [key…] 差集结果存入新集合destination中

set使用场景

微信抽奖小程序
点击参与抽奖加入集合 sadd key {userID}
查看参与抽奖所有用户 smembers key
抽取count名中奖者 srandmember key [count]/spop key [count]
微信微博点赞、收藏、标签
点赞 sadd user ID
取消点赞 srem user ID
检查用户是否点过赞 sismember user ID
获取用户点赞列表 smembers user
获取点赞用户数 scard user
关注模型 (使用集合)
共同关注的人 ------ 交集
可能认识的人 ------- 差集

其他应用场景:
https://bbs.huaweicloud.com/forum/thread-10558-1-1.html