Redis技术命令总结
基础命令
exists:判断key是否存在
del:删除key
type:判断key的类型
ttl:查看key存活时间
String结构
介绍:存储字符串类型的key—value
应用场景:验证码,计数器,发号器,订单重复提交令牌,热点商品卡片(序列化json对象存储),分布式锁
set/get:设置和获取key-value
mset/mget:批量设置和获取
incr:对key对应的值进行加1操作,并且返回新的值
incrby:将key对应的数字加increment。如果key不存在,操作之前,key就会被置为0
setex:设置key对应字符串value,并且设置key在给定的seconds时间之后超时过期,原子操作
setnx:讲key设置值为value,如果key不存在等同于set命令,当key存在时什么也不做,是set if not
exists的间歇
getset:设置key的值并返回key旧的值
注意:值的长度不能超过512mb
key命名规范:不要过长,冒号分割,业务名:表明:ID
List结构
介绍:字符串列表,按照插入顺序排序,双向链表,插入删除时间复杂度O(1)快,查找为O(n)慢
应用场景:简单队列,最新评论列表,非实时排行榜:定时计算榜单,如手机日销榜单
lpush:将一个或多个值插入到列表头部
rpush:在key对应的list的尾部添加一个元素
lpop:从key对应的list的尾部删除一个元素,并返回该元素
rpop:移除并获取列表最后一个元素
llen:获取列表长度
lindex:通过索引获取列表中的元素
lrange:获取key对应的list的指定下标范围的元素, 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素, -1表示获取所有元素( lrange key 0 -1);
brpop:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
lrem:移除元素,可以指定移除个数
注意:通常添加一个元素到列表的头部(左边)或者尾部(右边),存储的都是string字符串类型,支持分页操作,高并发项目中,第一页数据都是来源list,第二页和更多信息则是通过数据库加载,一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表不超过40亿个元素)
Hash结构
介绍:是一个string类型的field和value的映射表,hash特别适合用于存储对象
应用场景:购物车,用户个人信息,商品详情
hset:设置 key 指定的哈希集中指定字段的值
hget:返回 key 指定的哈希集中该字段所关联的值
hgetall:返回 key 指定的哈希集中所有的字段和值
hdel:从 key 指定的哈希集中移除指定的域
hexists:返回hash里面field是否存在
hincrby:增加 key 指定的哈希集中指定字段的数值, 如果是-1 则是递减
hmset:设置 key 指定的哈希集中指定字段的值
hmget:返回 key 指定的哈希集中指定字段的值
注意:每个 hash 可以存储 232 - 1 键值对(40多亿)
SortedSet结构:
介绍:用于将一个或多个成员元素及其分数值加入到有序集当中,如果某个成员已经是有序集的成员,那么更新这个成员的分数值,分数值可以是整数值或双精度浮点数。有序集合可以看做是在Set集合的的基础上为集合中的每个元素维护了一个顺序值: score,它允许集合中的元素可以按照score进行排序。
应用场景:实时排行榜:商品热销榜、体育类应用热门球队、积分榜.优先级任务、队列,朋友圈 文章点赞-取消,逻辑:用户只能点赞或取消,统计一篇文章被点赞了多少次,可以直接取里面有多少个成员
zadd:向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard:获取有序集合的成员数
zcount:计算在有序集合中指定区间分数的成员数
zincrby:有序集合中对指定成员的分数加上增量 increment
zrange:通过索引区间返回有序集合指定区间内的成员, 成员的位置按分数值递增(从小到大)来排序
zrevrange:通过索引区间返回有序集合指定区间内的成员, 成员的位置按分数值递增(从大到小)来排序
zrevrank:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
zrank:返回有序集key中成员member的排名。其中有序集成员按score值递增(从小到大)顺序排列
zrem:移除有序集合中的一个或多个成员
zscore:返回有序集中,成员的分数值
注意:底层使用到了Ziplist压缩列表和“跳跃表”两种存储结构,如果重复添加相同的数据,score值将被反复覆盖,保留最后一次修改的结果