Redis的string数据类型

字符串类型的值实际可以是字符串,包含⼀般格式的字符串或类似 JSON、XML 格式的字符串;数字,可以是整型或者浮点型;甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最大值不能超过 512 MB。
Redis 内部存储字符串完全是按照⼆进制流的形式保存的,所以 Redis 是不处理字符集编码问题的,客户端传入的命令中使用的是什么字符集编码,就存储什么字符集编码。

字符串数据类型

常见命令

命令 执行效果 时间复杂度
set key value 设置 key 的值为 value O(1)
get key 获取 key 的值 O(1)
del key [key ...] 删除指定的 key O (k),k 是键个数
mset key value [key value ...] 批量设置指定的 key 和 value O (k),k 是键个数
mget key [key ...] 批量获取 key 的值 O (k),k 是键个数
incr key 指定的 key 的值 +1 O(1)
decr key 指定的 key 的值 -1 O(1)
incrby key n 指定的 key 的值 +n O(1)
decrby key n 指定的 key 的值 -n O(1)
incrbyfloat key n 指定的 key 的值 +n(浮点数) O(1)
append key value 给指定 key 的值追加 value O(1)
strlen key 获取指定 key 的值的长度 O(1)
setrange key offset value 覆盖指定 key 从 offset 开始的部分值 O (n),n 为字符串长度,通常视为 O (1)
getrange key start end 获取指定 key 从 start 到 end 的部分值 O (n),n 为字符串长度,通常视为 O (1)

内部编码

字符串类型的内部编码有 3 种:

  • int:8 个字节的长整型。
  • embstr:小于等于 39 个字节的字符串。
  • raw:大于 39 个字节的字符串。

Redis 会根据当前值的类型和长度动态决定使用哪种内部编码实现。

bash 复制代码
整型类型⽰例如下:
127.0.0.1:6379> set key 6379
OK
127.0.0.1:6379> object encoding key
"int"


短字符串⽰例如下:
# ⼩于等于 39 个字节的字符串
127.0.0.1:6379> set key "hello"
OK
127.0.0.1:6379> object encoding key
"embstr"


⻓字符串⽰例如下:
# ⼤于 39 个字节的字符串
127.0.0.1:6379> set key "one string greater than 39 bytes ........"
OK
127.0.0.1:6379> object encoding key
"raw"

典型使用场景

缓存(Cache)功能
Redis 作为缓冲层,MySQL 作为存储层,绝大部分请求的数据都是从 Redis 中获取。由于 Redis 具有支撑高并发的特性,所以缓存通常能起到加速读写和降低后端压力的作用。
Redis + MySQL 组成的缓存存储架构

计数(Counter)功能

许多应用都会使用 Redis 作为计数的基础工具,它可以实现快速计数、查询缓存的功能,同时数据可以异步处理或者落地到其他数据源。例如视频网站的视频播放次数可以使用 Redis 来完成:用户每播放一次视频,相应的视频播放数就会自增 1。

共享会话(Session)

一个分布式 Web 服务将用户的 Session 信息(例如用户登录信息)保存在各自的服务器中,但这样会造成一个问题:出于负载均衡的考虑,分布式服务会将用户的访问请求均衡到不同的服务器上,并且通常无法保证用户每次请求都会被均衡到同一台服务器上,这样当用户刷新一次访问时可能会发现需要重新登录,这个问题是用户无法容忍的。

为了解决这个问题,可以使用 Redis 将用户的 Session 信息进行集中管理,在这种模式下,只要保证 Redis 是高可用和可扩展性的,无论用户被均衡到哪台 Web 服务器上,都集中从 Redis 中查询、更新 Session 信息。

手机验证码

很多应用出于安全考虑,会在每次进行登录时,让用户输入手机号并且配合给手机发送验证码,然后让用户再次输入收到的验证码并进行验证,从而确定是否是用户本人。为了短信接口不会频繁访问,会限制用户每分钟获取验证码的频率,例如一分钟不能超过 5 次。

以上介绍了使用 Redis 的字符串数据类型可以使用的几个场景,但其适用场景远不止于此,开发人员可以结合字符串类型的特点以及提供的命令,充分发挥自己的想象力,在自己的业务中去找到合适的场景去使用 Redis 的字符串类型。

相关推荐
清水白石0082 小时前
函数签名内省实战:打造通用参数验证装饰器的完整指南
java·linux·数据库
知识分享小能手2 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 事务和锁 — 语法知识点及使用方法详解(13)
数据库·学习·sqlserver
之歆2 小时前
iSCSI + GFS2 + cLVM 共享存储完全指南
数据库
一个天蝎座 白勺 程序猿2 小时前
KingbaseES约束机制:数据迁移中的数据完整性保障
开发语言·数据库·kingbase·kingbasees
bepeater12342 小时前
Linux安装Redis以及Redis三种启动方式
linux·redis·bootstrap
无巧不成书02182 小时前
【RN鸿蒙教学|第8课时】表单优化+AsyncStorage数据持久化(本地缓存)+ 多终端兼容进阶
react native·缓存·华为·交互·harmonyos
软件派3 小时前
数据库技术探秘:JDBC、ODBC、CDC与LOAD的深度解析
数据库
XP62263 小时前
MySQL单表存多大的数据量比较合适
数据库·mysql
是店小二呀3 小时前
MySQL 核心操作:表的CRUD、聚合与分组深度实践
数据库·mysql