redis的几种数据结构及使用场景

redis以key-value方式存储,支持诸多种数据结构:String,Hash,List,Set,Sorted Set

1.String字符串,应用场景最多的数据结构,其他四种是在此基础上实现的,value可以使简单的字符串、xml、json、数字、二进制。

键值最大不允许超过512m,从性能上建议不要超过1m。

应用场景:

  • 缓存;快速读取,支持高并发,可持久化(AOF和RDB),支持一些函数(get、set、incr、decr、len、append、getset)
  • 计数器;快速读取,incr实现
  • 共享session;解决分布式用户登录问题
  • 限流

AOF,没收到一条写命令,都会通过write函数追加到持久化的文件后,类似mysql的binlog。

RDB,周期性地以快照的方式将数据同步到硬盘文件,周期可设 always(降低服务器性能),everysec(建议),no。

2.Hash,指的是键值本身也是一种键值对的存储结构,将结构化的信息打包成hashmap,例如key:{{field1:value1},{field2:value2},{field3:value3},{field4:value4}...}

相比string减少了反序列化和序列化的消耗,也不适用于一些并发修改value中某个value的操作。

应用场景:

  • 例如门店/商品/用户信息的管理操作,但是不同于关系型数据库的结构完全结构化,hash的结构是稀疏的,没法做到级联查询。

3.List列表,双端链表实现,可以使用list的一些特性,例如*push的方式塞入,pop的方式取出,可以读取某个范围的元素,也可以充当队列使用。有序且可重复。

应用场景:

  • 文章、任务列表
  • 消息队列 lpush+brpop
  • 队列 lpush+rpop,轻量级,没有重试、重放等机制
  • 栈 lpush+lpop
  • 有限集合 lpush+ltrim

4.Set无序集合

应用场景:

  • 标签 sadd
  • 好友 sadd
  • 生成随机数 spop/srandmember 

5.Sorted Set有序集合

应用场景:

  • 排行榜

参考:https://www.runoob.com/redis/redis-tutorial.html

相关推荐