一、Redis的数据结构
存储的时候key和value都是String,value支持String、hash、list、set、zset等数据结构。 redis内部的key-value通过一个redisObject对象来存储,type表示value的类型(string等),encoding表示存储方式(raw/int等)
1. String
结构:key-value
常用方法:set、setex、setnx(setIfNotExist)、get、incr/decr
使用场景:存task、分布式锁、存int值做自增计数(incr具有原子性)
2. Hash 哈希表
结构:key:[field-value; field-value;] 映射关系,底层用hashMap存储的数据
常用方法:hset(key, field, value); hget/hexists/hdel(key, field); hgetAll(key)
使用场景:存客服的会话list(field会话key,value会话详情)、对工单的星标类型(field工单id,value星标类型)
3. List 列表
结构:key:[value; value;] 有序可重复,底层是双向链表实现的。头尾添加元素快,查找慢。
常用方法:lpush/rpush增、lpop/rpop删、lset(设置索引位置的值)、查lrange(key,start,end):可为负数-1表示链表尾部-2表示倒数第二个。 L是左边队头,R是右边队尾。
使用场景:做简单的消息队列功能,可以确保先后顺序;利用lrange做分页功能;
4. Set 集合
结构:key:[value1; value2;] 无序,不可重复。 底层用value为null的hashMap存储的
常用方法:sadd增、srem删、sismember/smembers查;
使用场景:需要做数据去重时。
5. sortedSet (zset) 有序集合
结构:key:[value-score; value-score] 底层使用HashMap和跳跃表(SkipList)来保证数据的存储和有序。
常用方法:zadd增、zrem删、zrange查
使用场景:做排序、取topK、范围查找等。