首页 > 数据库 >redis数据类型应用场景

redis数据类型应用场景

时间:2023-01-19 15:57:02浏览次数:35  
标签:场景 Redis 元素 redis 列表 集合 数据类型

Redis总共有8种数据类型,前5种为常用(基本)数据类型

Redis五种基本数据类型

String 字符串

概述

  • Redis最基本的类型,默认最大能存储512MB数据。
  • String类型的Value中可以存放任意数据,包括数值型,甚至是二进制的图片、音频、视频、序列化对象等。

应用场景

  • 数据缓存:Redis 作为数据缓存层,MySQL 作为数据存储层。应用服务器首先从 Redis 中获取数据,如果缓存层中没有,则从 MySQL 中获取后先存入缓存层再返回给应用服务器。
  • 计数器:在 Redis 中写入一个 value 为数值型的 key 作为平台计数器、视频播放计数器等。每个有效客户端访问一次,或视频每播放一次,都是直接修改 Redis 中的计数器,然后再以异步方式持久化到其它数据源中,例如持久化到 MySQL。
  • 共享Session:可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从 Redis 中查找相应的 Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。这样就不会引发“重新登录”问题。
  • 限速器:现在很多平台为了防止 DoS(Denial of Service,拒绝服务)攻击,一般都会限制一个IP不能在一秒内访问超过 n 次。而 Redis 可以可以结合 key 的过期时间与 incr 命令来完成限速功能,充当限速器。

Hash 散列表

概述

  • Hash 类型也称为 Hash 表、字典等。
  • Hash 表就是一个映射表 Map,也是由键-值对构成,为了与整体的 key 进行区分,这里的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型。

应用场景

  • Hash 型 Value 非常适合存储对象数据。key 为对象名称,value 为描述对象属性的 Map,对对象属性的修改在 Redis 中就可直接完成。其不像 String 型 Value 存储对象,那个对象是序列化过的,例如序列化为 JSON 串,对对象属性值的修改需要先反序列化为对象后再修改,修改后再序列化为 JSON 串后写入到 Redis。

List 链表(列表)

概述

  • List 列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。

应用场景

  • :通过 lpush + lpop 可以实现栈数据结构效果:先进后出。通过 lpush 从列表左侧插入数据,通过lpop 从列表左侧取出数据。当然,通过 rpush + rpop 也可以实现相同效果,只不过操作的是列表右侧。
  • 队列:通过 lpush + rpop 可以实现队列数据结构效果:先进先出。通过 lpush 从列表左侧插入数据,通过rpop 从列表右侧取出数据。当然,通过 rpush + lpop 也可以实现相同效果,只不过操作的方向正好相反。
  • 阻塞式消息队列:通过 lpush + brpop 可以实现阻塞式消息队列效果。作为消息生产者的客户端使用 lpush从列表左侧插入数据,作为消息消费者的多个客户端使用 brpop 阻塞式“抢占”列表尾部数据进行消费,保证了消费的负载均衡与高可用性。brpop 的 timeout 设置为 0,表示只要没有数据可弹出,就永久阻塞。
  • 动态有限集合:通过 lpush + ltrim 可以实现有限集合。通过 lpush 从列表左侧向列表中添加数据,通过ltrim 保持集合的动态有限性。像企业的末位淘汰、学校的重点班等动态管理,都可通过这种动态有限集合来实现。当然,通过 rpush + ltrim 也可以实现相同效果,只不过操作的方向正好相反。

Set 集合

概述

  • Set 集合中的每一个元素均为 String 类型。
  • Set 中的元素具有无序性与不可重复性。

应用场景

  • 动态黑白名单:例如某服务器中要设置用于访问控制的黑名单。如果直接将黑名单写入服务器的配置文件,那么存在的问题是,无法动态修改黑名单。此时可以将黑名单直接写入 Redis,只要有客户端来访问服务器,服务器在获取到客户端 IP后先从 Redis的黑名单中查看是否存在该 IP,如果存在,则拒绝访问,否则访问通过。
  • 有限随机数:有限随机数是指返回的随机数是基于某一集合范围内的随机数,例如抽奖、随机选人。通过 spop 或 srandmember 可以实现从指定集合中随机选出元素。
  • 用户画像:社交平台、电商平台等各种需要用户注册登录的平台,会根据用户提供的资料与用户使用习惯,为每个用户进行画像,即为每个用户定义很多可以反映该用户特征的标签,这些标签就可以使用 sadd 添加到该用户对应的集合中。这些标签具有无序、不重复特征。同时平台还可以使用 sinter/sinterstore 根据用户画像间的交集进行好友推荐、商品推荐、客户推荐等。

SortedSet 有序集合

概述

  • 有序Set 中的每个元素均 String 类型。
  • 有序Set 中的每一个元素都有一个分值 score,Redis 会根据score 的值对集合进行由小到大的排序。其与Set 集合要求相同,元素不能重复,但元素的score 可以重复。
  • 由于该类型的所有命令均是字母 z 开头,所以该 Set 也称为 ZSet。

应用场景

  • 有序 Set 最为典型的应用场景就是排行榜,例如音乐、视频平台中根据播放量进行排序的排行榜;电商平台根据用户评价或销售量进行排序的排行榜等。将播放量作为 score,将作品 id 作为 member,将用户评价积分或销售量作为 score,将商家 id 作为 member。使用zincrby 增加排序 score,使用 zrevrange 获取 Top 前几名,使用 zrevrank 查询当前排名,使用zscore 查询当前排序 score 等。

Redis三种特殊的数据类型

Geospatial 地理位置

概述

  • Redis 在 3.2 版本中引入了 Geospatial 这种新的数据类型。该类型本质上仍是一种集合,只不过集合元素比较特殊,是一种由三部分构成的数据结构,这种数据结构称为空间元素:
    • 经度:longitude。有效经度为[-180,180]。正的表示东经,负的表示西经。
    • 纬度:latitude。有效纬度为[-85.05112878,85.05112878]。正的表示北纬,负的表示南纬。
    • 位置名称:为该经纬度所标注的位置所命名的名称,也称为该 Geospatial 集合的空间元素名称。
  • 通过该类型可以设置、查询某地理位置的经纬度,查询某范围内的空间元素,计算两空间元素间的距离等。

应用场景

  • Geospatial 的意义是地理位置,所以其主要应用地理位置相关的计算。例如,微信发现中的“附近”功能,添加朋友中“雷达加朋友”功能;QQ 动态中的“附近”功能;钉钉中的“签到”功能等。

Hyperloglog 基数统计

概述

  • HyperLogLog 是 Redis 2.8.9 版本中引入的一种新的数据类型,其意义是 hyperlog log,超级日志记录。该数据类型可以简单理解为一个 set 集合,集合元素为字符串。但实际上HyperLogLog 是一种基数计数概率算法,通过该算法可以利用极小的内存完成独立总数的统计。其所有相关命令都是对这个“set 集合”的操作。

应用场景

  • HyperLogLog 可对数据量超级庞大的日志数据做不精确的去重计数统计。当然,这个不精确的度在 Redis 官方给出的误差是 0.81%。这个误差对于大多数超大数据量场景是被允许的。对于平台上每个页面每天的 UV 数据,非常适合使用 HyperLogLog 进行记录。

Bitmap 位图场景

概述

  • BitMap 是 Redis 2.2.0 版本中引入的一种新的数据类型。该数据类型本质上就是一个仅包含 0 和 1 的二进制字符串。而其所有相关命令都是对这个字符串二进制位的操作。用于描述该字符串的属性有三个:key、offset、bitValue。
    • key:BitMap是Redis 的 key-value 中的一种Value的数据类型,所以该 Value 一定有其对应的 key。
    • offset:每个BitMap数据都是一个字符串,字符串中的每个字符都有其对应的索引,该索引从 0开始计数。该索引就称为每个字符在该BitMap中的偏移量 offset。这个 offset的值的范围是[0,2³²-1],即该 offset 的最大值为 4G-1,即 4294967295,42 亿多。
    • bitValue:每个BitMap数据中都是一个仅包含 0 和 1 的二进制字符串,每个offset位上的字符就称为该位的值 bitValue。bitValue 的值非 0 即 1。

应用场景

  • 统计用户信息、活跃、不活跃、登录、未登录、打卡等等… 两个状态的都可以使用Bitmap。

标签:场景,Redis,元素,redis,列表,集合,数据类型
From: https://www.cnblogs.com/tandabao/p/17061655.html

相关文章

  • redis配置文件
    Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf)。可以在登入Redis后通过CONFIG命令查看或设置配置项通过config命令查......
  • redis的key操作及切换数据库
    redis默认有16个库(0-15),进入后默认在第0个库#切换数据库使用select命令,index为数据库标号,切换数据库后除了0号库其余库会在端口后的[]会显示编号selectindex#示例......
  • redis安装
    1.到官网寻找自己需要的版本wgethttps://github.com/redis/redis/archive/7.0.7.tar.gz2.编译&编译安装#解压并改名tarzxvf7.0.7.tar.gz-C/usr/local/mv/us......
  • redis启停和连接
    启动#redis-server命令用于启动redis,安装后该命令已位于/usr/local/bin/目录下,可在任意路径执行#直接执行redis-server则是前台启动,使用redis-server指定配置文件启动......
  • Golang的基本数据类型-基本使用
    基本数据类型-基础使用数值型整数类型使用细节Golang各整数类型分:有符号和无符号,intuint的大小和系统是32位还是64位有关Golang的整型默认声明为int型如何......
  • Redis下载安装与配置(linux)
    一、Redis下载与安装1.下载安装包官网下载地址:Download|Redis点击"Download7.0.7",即可进行下载。2.将安装包上传至服务器2.1将安装包上传至/usr/local目录并解压......
  • redis面试题
    1.项目中是否使用过redis?为什么要使用redis?使用过之前使用的都是修改某个value值,如登录账号被锁定30分钟,查看还剩余的时间,或者想将账号由锁定状态更新为未锁定状态,删......
  • Redis之key的淘汰策略
    淘汰策略概述redis作为缓存使用时,在添加新数据的同时自动清理旧的数据。这种行为在开发者社区众所周知,也是流行的memcached系统的默认行为。redis中使用的LRU淘汰算法是......
  • @Transactional注解失效场景之——同类中方法调用,事务失效
    文章目录​​一、亲身案例​​​​二、改进方式​​​​三、原理分析​​该篇博客为总结自己曾写下的Bug一、亲身案例当时的场景为:在controller层获取一笔交易单的信息(前台......
  • C语言中的整型数据类型(你真的了解吗)
    1.整型数据类型C语言里面的整数数据类型类型名称C语言中的关键字注释字符型char表示一个很小的整数短整型short表示一个不怎么大的整数整型int生活中一般的整数都可以表示......