Redis数据结构
redis数据结构共五类
- string String
- hash HashMap
- list LinkedList
- set HashSet
- sorted_set TreeSet
string数据类型
单个数据存储,以key:value的形式存在
string数据类型的基本操作
- 命令 set key value
- 命令 get key
- 命令 del key
- 命令 mset key1 value1 key2value2 …
- 命令 mget key1 key2 …
- 命令 获取键key所对应的值的长度
strlen key
- 命令 追加信息到原始信息尾部
append key value
string 数据类型的扩展操作
string在redis内部存储默认是字符串,当遇到增减类操作incr,decr会转成数值进行计算。redis所有操作都是原子性的,采用单线程处理所有业务,因此无需考虑并发带来的数据影响。按数值进行操作的数据,如果原始数据不能转换成数值,或超越了redis数值上线范围(Long.MAX_VALUE),将报错
8. 命令 incr key 值加1
9. 命令 incrby key increment 值加"increment"
10. 命令 incrbyfloat key increment 值加浮点数"increment"
11. 命令 decr key 值减1
12. 命令 decrby key increment 值减"increment"
13. 命令 setex key seconds value 设置数据具有指定的生命周期
14. 命令 psetex key milliseconds value
string数据类型扩展操作的业务场景
分表操作拿到唯一的ID,通过redis的自增来解决
rediskey的命名惯例
hash数据类型
底层使用哈希表结构实现数据存储
hash数据类型的基本操作
- 命令 hset key field value
- 命令 hget key field
- 命令 hgetall key
- 命令 hdel key field1 [field2]
- 命令 hmset key field1 value1 field2 value2 …
- 命令 hmget key field1 field2 …
- 命令 hlen key 获取键key中的字段数量
- 命令 hexists key field 判断指定字段是否存在
hash数据类型的扩展操作
- 命令 hkeys key 获取指定键下的field列表
- 命令 hvals key 获取指定键下的value列表
- 命令 hincrby key field increment
- 命令 hincrbyfloat key field increment
hash数据类型使用注意事项
- hash类型下的value只能存String字符串,不允许存储其他数据类型,部存在嵌套现象
- 每个hash可以存储2的32次方-1个键值对
- hash数据类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但是hash的初衷并不是为了存储大量对象而设计的
- hgetall命令可以获取全部键值对,效率较低
List数据类型
底层使用双向链表来实现,list里保存的数据都是string数据类型
list数据类型的基本操作
1、命令lpush key value [value] … 从左边push
2、命令rpush key value [value] … 从右边push
3、lrange key start stop 查询数据[start,stop]
例如 lrange key 0 -1 查询整个列表的数据
4、lindex key index 查询指定下标的数据
5、llen key 查询list的长度
6、lpop key 从左边弹出
7、rpop key 从右边弹出
list数据类型的扩展操作
1、blpop key [key …] timeout
2、brpop key [key …] timeout
命令解读:阻塞式弹出
list里有就弹出,没有元素时等待timeout秒,返回nil. 可以指定多个list,有就弹出,返回list 和弹出的元素
3、lrem key count value 删除指定元素
lrem list1 2 a 从列表中删除两个a 元素,从列表头部开始找
set数据类型
set数据类型的基本操作
1、sadd key member1 [member2] 添加数据
2、smembers key 查询数据
3、srem key member1 [member2] 删除数据
4、scard key 获取集合数据总量
5、sismember key member 判断集合是否包含指定元素
6、srandmember key [count] 随机获取指定数量的元素
7、spop key 随机获取set集合里的元素并移除该元素
8、求两个集合的交并差集
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
sorted_set数据类型
sorted_set数据类型的基本操作
1、zadd key score1 member1 [score2 member2] score代表顺序,添加元素
2、zrange key start stop 查询数据,数据将按score正向排序显示
3、zrange key start stop [WITHSCORES]数据将按score排序显示,但是会带上score
4、zrevrange key start stop 逆序显示
5、zrem key member1 [member2 …] 删除指定元素
6、zrangebyscore key min max 查询[min,max]范围的元素
7、zrangebyscore key min max [WITHSCORES]数据将带上score
8、zrangebyscore key min max [WITHSCORES] limit 0 3 分页操作
9、zrevrangebyscore key min max 逆序
10、zremrangebyrank key start stop 删除指定索引(排名)的元素
11、zremrangebyscore key start stop删除指定score范围的元素
12、zcard key 获取集合总量
13、zcount key min max 获取指定score范围的集合总量
14 、zrank key member 获取指定数据的索引(排名)按从小到大
15、zrevrank key member 获取指定数据的索引(排名)按从大到小
16、zscore key member 获取指定数据的score
17、zincrby key increment member 修改指定数据的score + increment