Redis数据类型
数据存储类型
redis数据类型类比java数据类型
redis类型 | java类型 |
---|---|
string | String |
hash | HashMap |
list | LinkedList |
set | HashSet |
sorted_set | TreeSet |
redis是一个Map存储结构,其中所有的数据都是采用key:value的形式存储
上述的五种存储类型,指的是value的类型
string
- 数据:单个数据
- 数据格式:一个存储空间保存一个数据
- 存储内容:通常使用字符串,如果字符串以整性的形式表示,可以作为数字操作使用,例如累加等
基本操作
-
添加/修改数据
set key value
-
获取数据
get key
-
删除数据
del key
-
添加/修改多个数据
mset key1 value1 key2 value2 …
(原set多了个m,m指Multiple-多个)
-
获取多个数据
mget key1 key2 …
-
获取数据字符个数(字符串长度)
strlen key
-
追加信息到原始信息后面,如果存在原始信息则追加,不存在则新建
append key value
string扩展操作
-
设置数值数据增加指定范围的值
incr key # 增加1
incrby key increment # 增加指定整数值
incrbyfloat key increment # 增加指定小数值
increment可以为正,也可以为负
-
设置数值数据减少指定范围的值
decr key # 减少1
decrby key increment #减少指定整数值
注:string在redis内部存储默认就是字符串,当遇到增减类数值操作时,如incr、decr时会转为数值型计算
按数值进行计算时,如原始数据不能转换为数值型或超过redis数值上限(java中long类型的最大值Long.MAX_VALUE:9223372036854775807=2^63-1)将会报错
-
设置数据过期时间
setex key seconds value # key存活指定秒
psetex key milliseconds value # key存活指定毫秒
redis控制数据的过期时间,通过该机制来控制业务行为,例如订单过期等
string数据操作注意事项
-
数据操作成功或失败的差异
-
运行结果是否为成功
- (integer)0 -> false 失败
- (integer)1 -> true 成功
-
运行结果值
- (integer)3 -> 3 3个
-
-
数据不存在
- (nil)等同于null
-
数据最大存储量
-
512MB
-
数值计算最大范围(java中long的最大值)
- Long.MAX_VALUE:9223372036854775807=2^63-1
key的命名规范
热点数据命名惯例:表名:主键名:主键值:字段名
hash
对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
存储结构:一个存储空间保存多个键值对数据或者理解保存了一个对象
hash类型:底层使用哈希表结构实现数据存储
基本操作
-
添加/修改数据
hset key field value
-
获取数据
hget key field
hgetall key
-
删除数据
hdel key filed1 [filed2] …
-
添加/修改多个数据
hmset key filed1 value1 filed2 value2 …
-
获取多个数据
hmget key filed1 filed2 …
-
获取哈希表中的字段数量
hlen key
-
获取哈希表中是否存在指定的字段
hexists key filed
hash数据扩展操作
-
获取哈希表中所有字段名或字段值
hkeys key
hvals key
-
设置指定字段的数值数据增加指定范围值
hincrby key filed increment
hincrbyfloat key filed increment
hash数据操作注意事项
- hash类型下的value只能存储字符串,不允许存储其他数据类型
- 每个hash可以存储2^32-1个键值对
- hash类型可以类比成一个对象存储形式,并且提供了笼火的添加删除对象属性。但hash设计初衷并不是为了存储大量对象,切勿滥用
- hgetall操作会获取对象全部属性,如果内部filed过多,遍历整体数据效率会很低,应该需要哪个就获取哪个
list
- 数据存储需求:存储多个数据,并保持数据进入存储空间的顺序
- 存储结构:一个存储空间保存多个数据
- list类型:底层使用双向链表结构实现
基本操作
-
添加/修改数据
lpush key value1 value2 … # 从左侧放入链表
rpush key value1 value2 … # 从右侧放入链表
-
获取数据
lrange key start stop # 获取指定范围数据(按数据进入存储空间顺序) start=0 stop=-1,将获取所有元素
lindex key index # 获取指定下标数据
llen key # 链表长度
-
获取并移除数据(类比队列)
lpop key
rpop key
list扩展操作
-
规定时间内获取并移除数据
blpop key1 [key2] timeout
brpop key1 [key2] timeout
在timeout秒时间内获取链表最左边(blpop)或最右边(brpop)的元素,如果存在则立刻取出,如果不存在元素,则监听timeout秒直到超时或者有新元素进入
-
移除指定数据
lrem key count value # 移除列表中和value相等的元素,如果有多个则移除count个
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
- count = 0 : 移除表中所有与 VALUE 相等的值
list操作注意事项
- list保存的数据是string类型,数据总量是有限的,最多2^32-1个元素
- list具有索引的概念,但操作数据时通常以队列的形式进行入队出队操作或以栈形式进行 操作
- 获取全部数据结束索引stop设置为-1
- list可以对数据进行分页操作,通常第一页信息来自于缓存,之后页数再去查询数据库(第一页访问高频)
set
- 数据存储需求:存储大量数据,在查询方面提供更高的效率
- set类型:与hash存储结构相同,仅存储键,不存储值,并且值是不允许重复的(类比java中HashSet)
set基本操作
-
添加数据
sadd key member1 [member12]
-
获取全部数据
smember key
-
删除数据
srem key member1 [member2]
-
获取集合数据总量
scard key
-
判断集合中是否包含某元素
sismember key member
set扩展操作
-
随机获取集合中指定数量的元素
srandmember key [count]
-
随机获取集合中的某个数据并将该数据移除集合
spop key
应用场景:redis应用于随机推荐类信息检索,例如热点新闻、热点歌单等
-
求两个集合的交集、并集、差集
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
-
求两个集合的交集、并集、差集并存储新集合
sinterstore destination key1 [key2]
sunionstroe destination key1 [key2]
sdiffstroe destination key1 [key2]
destination指新集合
-
将指定数据从原集合移动到目标集合
smove source destination member
set操作注意事项
- set类型不允许数据重复
- set虽然与hash结构相同,但无法启用hash中存储值得空间
sorted_set
- 存储需求:数据排序有利于数据的有效展示,需要停工一种可以根据自身特征进行排序的方式
- 存储结构:保存可排序的数据
- sorted_set:在set的存储结构基础上添加可排序字段
sorted_set基本操作
-
添加数据
zadd key score1 member1 [score2 member2]
-
获取全部数据
zrange key start stop [withscores]
zrevrange key start stop [withscores]
[withscores] 查询元素
-
删除数据
zrem key member [member …]
-
按条件获取数据
zrangebyscore key min max [withscores] [limit]
zrevrangebyscore key min max [withscores] [limit]
-
条件删除数据
zremrangebyrank key start stop
zremrangebyscore key min max
-
获取集合数据总量
zcard key
zcount key min max
-
集合交、并操作
zinterstore destination numkeys key [key …]
zunionstore destination numkeys key [key …]
sorted_set扩展操作
-
获取数据对应的索引
zrank key member
zrevrank key member
-
score值获取与修改
zscore key member
zincrby key increment member
sortes_set注意事项
- score保存数据存储空间是64位,如果是整数范围为-9007199254740092~9007199254740092
- score保存的数据也可以是双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时谨慎
- sorted_set底层存储还是基于set结构的,因此数据不能重复,如果添加相同数据,score值将被反覆盖,保留最后一次的结果