redis五种数据结构的使用场景

共计 1350 个字符,预计需要花费 4 分钟才能阅读完成。

String-字符串

字符串类型是redis中最为基础的数据结构。

  • 存储最简单的key-value结构
  • value可以为字符串、整型或浮点型
  • 对于整型或浮点型可以执行自增或自减操作
# 设置一个字符串键值对
SET username "alice"
# 获取字符串值
GET username

使用场景

  • 常用的缓存功能:利用redis做缓存,配合其他数据库,可以大大加快系统的读写速度
  • 计数器:例如web应用,想要统计用户每日的点击量,只需要将用户ID加上时间戳做key,并在用户每次点击时,向redis发送INCR命令,执行一次自增即可。最终的数据结果可以在特点的时间点比如0点持久化到其他存储介质中。
  • 共享用户session:用户每次刷新页面,可能都需要重新登录或者读取cookie中的登录信息,也可以利用redis统一管理用户的session信息,只需要保证redis的高可用即可。

Hash-字典

  • hash类型用于存储对象,对象的结构为属性,值
  • 值的类型为string
  • 设置单个属性语法:hset key field value,设置多个属性语法:hmset key field1 value1 field2 value2….
# 设置哈希字段
HSET user:id123 name "Alice" age 30
# 获取哈希字段值
HGET user:id123 name
HGET user:id123 age

使用场景

  • 存储用户信息,能够单独修改用户的某一属性信息

List-列表

  • redis使用的是双端链表实现的list
  • list的元素类型为string
  • 按照插入的顺序排序
  • 插入语法:lpush/rpush key value1 value2….
  • 弹出元素:blpop/brpop key index timeout
# 在列表的左侧插入元素
LPUSH tasks "task1"
LPUSH tasks "task2"
# 获取列表的元素
LRANGE tasks 0 -1

使用场景

  • 消息队列:可以利用redis 的*push的操作将任务存在list中,工作线程再用b*pop的操作取出任务执行
  • 文章列表或记录事件的timeline等:利用的redis的list存储不但有序,取出时使用*range命令可以按范围取出元素

Set-集合

  • 无序集合
  • 元素为string类型
  • 元素具有唯一性
  • 集合没有修改操作
  • 可以计算交集、并集,差集
# 向集合中添加元素
SADD tags "tag1" "tag2" "tag3"
# 获取集合的所有元素
SMEMBERS tags

使用场景

  • 计算共同好友,共同浏览过的商品等:例如将两个用户浏览过的商品集合做交集,即可得到共同浏览过的商品
  • 统计访问网站的所有独立IP
  • 好友推荐:利用用户的tag求交集,按照业务需求分析交集内容,可做好友推荐等类型功能

Zset-有序集合

  • sorted set,有序集合
  • 元素为string类型
  • 元素具有唯一性
  • 每个元素都会关联一个double类型的score,表示权重,会按权重从小到大排序
  • 没有修改操作
# 向有序集合添加成员并指定分数
ZADD leaderboard 100 "player1" 200 "player2" 50 "player3"
# 获取有序集合中分数范围内的成员
ZRANGEBYSCORE leaderboard 0 150

使用场景

  • 排行榜:自带去重排序功能,可以根据需求,比如使用点击量访问量等作为score
正文完
 
Dustin
版权声明:本站原创文章,由 Dustin 2020-01-28发表,共计1350字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。