Redis的数据类型详解及其应用场景

Redis数据类型

string、hash、list、set、sorted_set

Redis数据存储格式:redis自身是一个Map,其中所有的数据都是采用key:value的形式存储

String类型数据 

基本操作:set,mset

String类型数据的扩展操作

1、设置数值数据增加执行范围

  • incr key
  • incby key increment
  • incrbyfloat key increment

2、设置数值数据减少指定范围

  • decr key
  • decrbt key increment

3、还可以用于数据库表分区的主键不重复

4、设置数据指定的生命周期

  • setex key seconds value
  • psetex key milliseconds value

String类型数据操作的注意事项

Hash数据类型

  • 新的存储需求:对一系列存储的数据进行分组,方便管理,典型应用存储对象信息
  • 需要的存储结构:一个存储空间保存多个键值对数据
  • hash类型:底层使用哈希表结构实现数据存储

hash类型数据的基本操作

1、添加/修改数据

hset key field value

2、获取数据

hget key field

hgetall key

3、删除数据

hdel key field1 [field2]

4、添加/修改多个数据

hmset key field1 value1 field2 value2 ...

5、获取多个数据

hmget key field1 field2 ...

6、获取哈希表中字段的数量

hlen key

7、获取哈希表中是否存在指定的字段

hexists key field

hash数据类型的扩展操作

1、获取哈希表中所有字段名或者字段值

hkeys key

hvals key

2、设置指定字段的数值数据增加指定范围的值

hincrby key field increment

hincrbyfloat key field increment

hash类型数据操作的注意事项

  • hash类型下的value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象,如果数据没有获取到,对应的值为null
  • 每个hash可以存储2^32-1个键值对
  • hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性,但是hash设置初始目的不是为了存储大量对象而设计,切记不可滥用,更不可以将hash作为对象列表使用
  • hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就会很低,有可能成为数据访问瓶颈

hash类型应用场景

电商网站购物车设计与实现,现仅仅分析购物车的redis存储模型

解决方案:

  • 以客户id作为key,每位客户创建一个hash存储结构存储对应的购物车信息
  • 将商品编号作为field,购买数量作为value进行存储
  • 添加商品:追加全新的field和value
  • 浏览:遍历hash
  • 更改数量:自增/自减,设置value值
  • 删除商品:删除field
  • 清空:删除key

List数据类型

存储多个数据,并对数据进入存储空间的顺序进行区分一个存储空间保存多个数据,并且通过数据可以体现进入顺序底层使用双向链表存储结构实现。

List类型数据的基本操作

1、添加/修改数据

lpush key value1 [value2] ...

rpush key value1 [value2] ...

2、获取数据

lrange key start stop

lindex key index

llen key

3、获取并且移除数据

lpop key

rpop key

List类型数据扩展操作

规定时间内获取并且移除数据

blpop key1 [key2] timeout

brpop key1 [key2] timeout

List类型数据业务操作

微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息,如果取消点赞,移除对应好友信息

移除指定数据

lrem key count value

List类型数据操作注意事项

  • list中保存的数据都是string类型的,数据总容量是有限的,最多2^32-1个元素
  • list具有索引的概念,但是操作数据的时候通常以队列的形式进行入队出队操作,或者以栈的形式进行入栈出栈操作
  • 获取全部数据操作结束索引设置为-1
  • list可以对数据进行分页操作,通常第一页的信息来自于list,第二页以及更多的信息通过数据库的形式加载

Set数据类型

存储大量的数据,在查询方便提供更高的效率,便于查询

Set类型:与hash类型结构完全相同,仅仅存储键,不存储值(nil),并且值是不允许重复的

set数据类型的基本操作

1、添加数据

sadd key member1 [member2]

2、获取全部数据

smembers key

3、删除数据

srem key member1 [member2]

3、获取集合数据总量

scard key

set数据类型的扩展操作

业务场景:

        每位用户首次使用今日头条的时候都会设置3项爱好的内容,但是后期为了增加用户的活跃度、兴趣点,必须让用户对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?

业务分析:

              系统分析数各个分类的最新或者最热点信息条目并且组织成set集合

              随机挑选其中部分信息

              配合用户关注信息分类中的热点信息组织成展示的全信息集合

解决方法:

随机获取集合中指定数量的数据

srandmember key [count]

随机获取集合中的某个数据并且将该数据移出集合

spop key

Set类型数据操作的注意事项

  • set类型不允许数据重复,如果添加的数据在set中已经存在,只保留一份
  • set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间

Sorted_set数据类型

新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式

需要的存储结构:新的存储模型,可以保存可排序的数据

Sorted_set类型:在set的存储结构基础上添加可排序字段

Sorted_set类型数据的基本操作

1、添加数据

zadd key score1 member1 [score2 member2]

2、获取全部数据

zrange key start stop [WITHSCORES]

zrevrange key start stop [WITHSCORES]

3、删除数据

zrem key member [member...]

注意:min与max用于限定搜索查询的条件;stat与stop用于限定查询范围,作用于索引,表示开始和结束索引;offset与count用于限定查询的范围,作用于查询结果,表示开始位置和数据总量

4、获取集合数据总量

zcard key 

zcount key min max

5、集合交、并操作

zinterstore destination numkeys key [key ...]

zunionstore destination numkeys key [key ...]

Sorted_set类型数据操作的注意事项

  • score保存的数据存储空间是64位
  • score保存的数据也可以使一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用的时候要慎重
  • sorted_set底层存储还是基于set结构的,因此数据不能重复,如果添加相同的数据,score的值将被反复覆盖,保留最后一次修改的结果

Sorted_set类型数据的扩展操作

业务场景

              票选广东十大杰出青年,各类综艺选秀海选投票

              各类资源网站top10

              聊天室活跃度统计

              游戏好友亲密度

业务分析

              为所有参与排名的资源建立排序依据

解决方法:

1、获取数据对应的索引(排名)

zrank key member

zrevrank key member

2、score值获取与修改

zscore key member

zincrby key increment member

猜你喜欢

转载自blog.csdn.net/kidchildcsdn/article/details/113914509