主要介绍基本的数据结构,具体的介绍、命令可以参考官网,命令手册:redis命令手册
一、五种基本数据结构
1、string
动态字符串(SDS),类似于 Java 的 ArrayList
采用预分配冗余空间的方式减少内存的频繁分配
长度小于 1M 时,扩容 == 加倍现有的空间;长度超过 1M 时,一次只会扩容 1M
最大长度为512M
【命令】
set key value / get key
mset k1 v1 k2 v2 k3 v3 / mget k1 k2 k3
expire key X秒 / setex key X秒 value
setnx k v
incr key / incrby key step(int)
decr key / decrby key step(int)
2、hash
相当于Java中的 HashMap,数组+ 链表,无序字典
渐进式rehash,保留新、旧两个hash结构,逐渐完成数据的迁移
可以用来存储用户的基本信息,每个字段单独存储,优于 string 的 一次性全部序列化
缺点:实际存储消耗高于string,具体情况以实际情况权衡
hset key field value
hgetall key
hget key field
hlen key
hmset k field1 value1 field2 value2 field3 value3
hincrby key field setp(int)
3、list
相当于Java中的 LinkedList,底层时链表,插入/删除 时间复杂度 O(1) ,查询 时间复杂度 O(n)
双向链表
常用来做异步队列使用
rpush key 1 2 3 4
llen key
lpop key
lpush key 1 2 3 4
rpop key
【慢操作】
lindex key index(0~)
ltrim key start_index end_index
lrange key start_index end_indext
【快速列表 quicklist】
列表元素较少的情况下,使用一块连续的内存存储,这个结构是 ziplist (压缩列表)
4、set
相当于 Java 中 HashSet,键值对无序,但是唯一,具备去重功能。
内部实现相当于一个特殊的字典,value 都是 NULL
sadd key field //单个设值
sadd key field1 field2 field3 //批量设值
smembers key //查询全部数据
sismember key field // 获取某个value 是否存在
scard key //获取长度
spop key //弹出一个
5、sorted set
相当于SortedSet \ HashMap 的结合体,即保证唯一性,也保证排序权重
zadd key score field
zrange key 0 -1 //正序输出
zrevrange key 0 -1 //逆序输出
zcard key //相当于 count()
zscore key field
zrank key field
zrangebyscore key start_score end_score
zrem key field // 删除
【跳跃链表】
重点补充
容器型数据结构的通用规则
list 、set、hash、zset 属于容器型数据结构
1、create if not exists,容器不存在,则创建一个
2、drop if no elements,容器中没有元素了,立即删除容器、释放内存
过期时间
过期以对象为基本单位
字符串重新 set value,过期时间会失效