Redis:数据存储类型五种常⽤数据类型:string、hash、list、set和sorted_set。
redis数据存储格式:
redis⾃⾝是⼀个Map,其中所有的数据采⽤key:value形式存储
数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串
⼀、string类型
存储的数据:单个数据,最简单的数据存储类型,也是最常⽤的数据存储类型
存储数据的格式:⼀个存储空间保存⼀个数据
存储内容:通常使⽤字符串,如果字符串以整数的形式展⽰,可以作为数据操作使⽤1.1 基本操作
增加/修改数据
set key value
获取数据
get key
删除数据
del key
增加/修改多个数据
mset key1 value1 key2 value2
获取多个数据
mget key1 key2
获取数据字符串长度
strlen key
追加信息到原始信息后部(如果原始信息存在就追加,否则新建)
append key value
1.2 扩展操作
设置数据增加指定范围的值
incr key
incrby key increment
incrbyfloat key increment
设置数据减少指定范围的值
decr key
decr key increment
1.2.1 string作为数值操作
string在redis内部存储默认是⼀个字符串,当遇到增减类操作incr,decr是会转成数值型进⾏计算。按数值进⾏操作的数据,如果原始数据不能转成数值或者超过redis数值上限将报错
redis所有操作都是原⼦性的,采⽤单线程处理所有的业务,命令时⼀个个执⾏的,因此⽆需考虑并发带来的数据影响
Tips:
redis⽤于控制数据库表主键id,为数据库表主键提供⽣成策略,保障数据库表的主键唯⼀性
此⽅案适⽤于所有数据库,且⽀持数据集
1.2.2 设置⽣命周期
设置数据具有指定的⽣命周期
setex key seconds value
psetex key milliseconds value
Tips:
redis控制数据的⽣命周期,通过数据是否失效控制业务⾏为,适⽤于所有具有时效性限定控制的操作
1.2.3 存储数据库的值
在redis中存储数据库(如MySQL)的⽤户信息,以⽤户主键和属性值为key,后台设定定时刷新策略。
也可以⽤json格式存储⽤户信息,更推荐hash类型,⽅便修改。
⼆、hash类型
对象类的存储如果使⽤string类型或者json格式,更新需求操作会显得笨重。
新的存储需求:对⼀系列存储的数据进⾏编组,⽅便管理,典型应⽤存储对象信息需要的存储结构:⼀个存储空间保存多个键值对数据
hash类型:底层使⽤哈希表结构实现数据存储
hash存储结构优化
如果field数量较少,存储结构优化为类数组结构
如果filed数量较多,存储结构使⽤HashMap结构
2.1 基本操作
添加/修改数据
hset key field value
获取数据
#只显⽰field的value
hget key field
#所有field和value都显⽰
hgetall key
删除数据
hdel key filed1
添加/修改多个数据
redis支持的五种数据类型hmset key field1 value1 field2 value2
获取多个数据
hmget key field1 field2
获取哈希表中字段的数量
hlen key
获取哈希表中是否存在指定的字段
hexists key field
2.2 扩展操作
获取某个哈希类型中所有的字段名或字段值
hkeys key
hvals key
设置指定字段的数据类型增加指定范围的值
hincrby key field increment
hincrbyfloat key field increment
2.3 注意事项
hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
每个hash可以存储2^32-1个键值对
hash类型⼗分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储⼤量对象⽽设计的,切记不可滥⽤,更不可以将hash作为对象列表使⽤
hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会低,有可能成为数据访问的瓶颈
2.4 应⽤场景
2.4.1 ⽤户购物车信息
电商⽹站购物车设计与实现:⽤户id作为key,商品id作为field,商品数量作为value。每个⽤户肚饿购物车的商品记录保存为⼀条field。但这种⽅式并没有保存完整的商品信息。
改进1:
每条购物车的商品记录保存为两条field
field1专⽤于保存购买数量,命名格式:商品id:nums 保存数据:数值
field2专⽤于保存购物车中显⽰的信息,包括⽂字描述、图⽚地址、所属商家等。命名格式:商品id:info 保存数据:json
改进2:不同⽤户的购物车有相同商品,将商品info单独放在hash,为防⽌相同商品重复添加:
#如果有key的field字段,则不添加
hsetnx key field value
2.4.2 抢购商品
以商家id作为key
将参与抢购的商品id作为field,参与抢购的商品数量作为value
抢购是使⽤降值⽅式控制产品数量
三、list类型
数据存储需求:存储多个数据,并对数据进⼊存储空间的顺序进⾏区分
需要的存储结构:⼀个存储空间保存多个数据,且通过数据可以体现进⼊顺序list类型:保存多个数据,底层使⽤双向链表存储结构实现
3.1 基本操作
添加/修改数据
#从左端添加
lpush key value1
#从右端添加
rpush key value1
获取数据
#从左边开始遍历数据,下标start到stop。stop为-1是倒数第⼀个
lrange key start stop
#从左边开始遍历数据,下标为index的数据
lindex key index
#列表长度
llen key
获取并移除数据
#从左侧移除
lpop key
#从右侧移除
rpop key
3.2 扩展操作
规定时间内获取并移除数据
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论