Redis数据结构

Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手。

Redis主要支持以下数据结构:

  1. String(字符串)
  2. List(双端链表)
  3. Hash(Hash字典)
  4. Set(无序集合)
  5. Sorted Set(有序集合)
数据结构 描述 实现
String 可以存储字符串,整型和浮点型等类型的数据。适合于简单的K-V数据场景。
对整数和浮点数执行自增或者自减操作
Redis并没有使用字符数组来实现这一数据类型,而是自己定义了简单动态字符串(SDS: Simple Dynamic String)类型来实现这一数据结构。
List 既可以存储操作有序的数据,还可以当做栈来使用,它适合存储列表性质的数据。从两端压入或者弹出元素
对单个或者多个元素进行修剪,
只保留一个范围内的元素
List在Redis中使用的是双端链表和压缩列表实现的,这就解释了它为什么能在头尾操作元素。 C语言并没有双端链表的实现,所以Redis自定义了这一数据结构。
Hash Hash字典,也是关联数组,数组的每个元素都是key到value的映射,它适合存储对象这样的结构化数据。 Hash在Redis中是使用Hash字典和压缩列表实现的。
Set Set无序集合,它适合存储需要去重的元素,且有并集,交集,差集等功能在多个Set之间进行比较计算。 整数集合是Set的底层实现之一,当集合只有整型元素且元素数量不多的时候,Redis就会使用整数集合来实现Set。当新添加元素的时候,整数集合会根据新元素的类型自动扩容,并将所有元素的类型都转为与新元素一样的类型,在这个过程中,还需要保持原来的顺序不变,最后才添加新元素。
Sorted Set Sorted Set有序集合,可以看做加强版的Set。Sorted Set 与 Set不同的是,Sorted Set可以根据元素的score分数进行排序。它适合存储需要排序的不重复的元素。 Sorted Set在Redis中使用的是跳表实现的,跳表是一种有序且查询速度很快的数据结构。跳表每个节点都维持指向其他节点的指针,从而达到快速访问的目的。

使用场景

计数器

可以对 String 进行自增自减运算,从而实现计数器功能。

Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。

缓存

将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。

查找表

例如 DNS 记录就很适合使用 Redis 进行存储。

查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效,因为缓存不作为可靠的数据来源。

消息队列

List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息

不过最好使用 Kafka、RabbitMQ 等消息中间件。

会话缓存

可以使用 Redis 来统一存储多台应用服务器的会话信息。

当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

分布式锁实现

在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。

可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。

其它

Set 可以实现交集、并集等操作,从而实现共同好友等功能。

ZSet 可以实现有序性操作,从而实现排行榜等功能。

【带你重拾Redis】Redis数据结构及使用场景相关推荐

  1. 【面试经典】redis 常见数据结构以及使用场景分析

    1.String 常用命令: set,get,decr,incr,mget 等. String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字. 常规key- ...

  2. 【带你重拾Redis】Redis常见知识点

    什么是Redis? Redis是一个使用ANSI C语言编写,遵守BSD协议规范的开源的K-V类型的NoSQL数据库服务器. Redis是当前最流行的K-V类型的NoSQL数据库之一,在通往系统架构的 ...

  3. Redis核心数据结构List应用场景-商品列表、缓存击穿、PV阅读量、抢红包、推送帖子、普通分布式锁、Redis可重入锁与红锁

    List应用场景 Redis之List 一. Redis list命令实战 二.商品列表 高并发的淘宝聚划算实现技术方案 SpringBoot+Redis实现商品列表功能 二.缓存击穿 什么是缓存击穿 ...

  4. Redis的数据结构及应用场景

    2019独角兽企业重金招聘Python工程师标准>>> 一. 谈谈对redis的理解,它的应用场景. Redis是一个key-value存储系统,它支持存储的value类型包括str ...

  5. php两个数组之间去重,php数组去重、魔术方法、redis常用数据结构及应用场景

    一.用函数对数组进行去重的方法 1. arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留 每个值第一次 出现的健名,健名保留不变. 第二个参数可以选择排序方式: ...

  6. 【带你重拾Redis】Redis 哨兵集群实现高可用

    Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 Redis master 和 sla ...

  7. 【带你重拾Redis】Redis 主从架构

    Redis 主从架构 单机的 Redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  8. 【带你重拾Redis】Redis持久化

    Redis持久化 Redis有2种持久化策略: RDB和AOF. RDB(Redis Data Base) RDB是Redis默认的持久化策略,这种策略是把数据库的快照以二进制形式的副本保存在磁盘上. ...

  9. 【带你重拾Redis】Redis过期策略 和 内存淘汰策略(key回收)

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

最新文章

  1. 使用javascript让项目支持热插拔
  2. [转载] 七龙珠第一部——第092话 孙悟空上场了
  3. Docker挂载主机目录Docker访问出现Permission denied的解决办法
  4. python学习-列表解析、字典解析
  5. Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布
  6. 买买买!!!电商促销必备的气氛PSD分层海报
  7. 最强JAVA核心技术群
  8. python中print怎么用_python中print的使用方法
  9. 手工从grub引导进入Ubuntu16.04
  10. STM32共阳数码管编程分享
  11. 几行代码解决百度云视频变成 8秒净网公告问题(滑稽)
  12. 广州图普网络科技2017校园招聘简章
  13. Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts
  14. Linux主机名查看和更改
  15. 小红书MVP系统架构与技术选型(一)
  16. o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
  17. 【gitHubDailyShare】通过真实录音,让动漫人物的嘴唇实现音画同步。开发者可将其应用于计算机游戏
  18. VScode前端插件安利
  19. 联通软件研究院笔试题2
  20. 微信小程序集成 “百度语音合成” 功能

热门文章

  1. R语言plotly可视化:plotly可视化累积cumulative直方图(Cumulative Histogram)
  2. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)
  3. RuntimeWarning:Glyph 21435 missing from current font.
  4. R语言sub函数和gsub函数替换(replace)匹配的字符串实战
  5. 长连接、短连接、短轮询、长轮询
  6. Logstic与Softmax比较
  7. php 顶踩,php和jQuery实现文章页【顶】和【踩】的功能
  8. SoapUI:mock service的简单使用
  9. Android APP性能优化
  10. 基因测序3——三、四代测序技术来势汹汹,国产化仍在布局二代测序?