Redis基本数据结构之String

1 String (字符串类型)

字符串类型 是 Redis 最基础的数据结构。字符串类型 的值实际可以是 字符串简单复杂 的字符串,例如 JSON、XML)、数字(整数、浮点数),甚至是 二进制(图片、音频、视频),但是值最大不能超过 512MB

1.1相关命令

(1) 设置值

命令为:set key value [ex seconds] [px milliseconds] [nx|xx]

set 命令有几个选项:

l ex seconds:为键设置秒级过期时间。

l px milliseconds:为键设置毫秒级过期时间。

l nx:键必须不存在,才可以设置成功,用于添加。

l xx:与 nx 相反,键必须存在才可以设置成功,用于更新。

使用方法如图:

除了 set 选项,Redis 还提供了 setex 和 setnx 两个命令:

setex key seconds value

setnx key value

setex:设定键的值,并指定此键值对应的 有效时间

使用方法如图:

setnx:键必须 不存在,才可以设置成功。如果键已经存在,返回 0

使用方法如图:

(2) 获取值

命令为:get key

如果要获取的 键不存在,则返回 nil()。

(3) 批量设置值

命令为:mset key value [key value ...]

下面操作通过 mset 命令一次性设置 4 个 键值对:

(4) 批量获取值

命令为:mget key [key ...]

批量操作命令,可以有效提高开发效率,假如没有 mget 这样的命令,要执行 n 次 get 命令的过程和耗时如下:

n次get时间 = n次网络时间 + n次命令时间

使用 mget 命令后,执行 n 次 get 命令的过程和 耗时 如下:

n次get时间 = 1次网络时间 + n次命令时间

(5) 计数

命令为: incr key

incr 命令用于对值做自增操作,返回结果分为三种情况:

l 值不是 整数,返回 错误。

l 值是 整数,返回 自增 后的结果。

l 键不存在,按照值为 0自增,返回结果为 1。

使用如图

除了 incr 命令,Redis 还提供了 decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)等命令操作。

(6) 各种命令的时间复杂度

1.2 应用场景

缓存功能

下面是一种比较典型的缓存使用场景,其中Redis作为缓存层,MySQL 作为存储层,绝大部分请求的数据都是从Redis中获取。由于Redis具有支撑高并发的特性,所以缓存通常能起到加速读写降低后端压力的作用。

(1) 计数

许多应用都会使用 Redis 作为 计数 的基础工具,它可以实现 快速计数、查询缓存 的功能,同时数据可以 异步落地 到其他 数据源。一般来说,视频播放数系统,就是使用 Redis 作为 视频播放数计数 的基础组件,用户每播放一次视频,相应的视频播放数就会自增 1。

一个真实的 计数系统 要考虑的问题会很多:防作弊、按照 不同维度 计数,数据持久化底层数据源等。

(2) 共享Session

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

为了解决这个问题,可以使用 Redis 将用户的 Session 进行 集中管理。在这种模式下,只要保证 Redis 是 高可用 和 扩展性的,每次用户 更新 或者 查询 登录信息都直接从 Redis 中集中获取。

(3) 限速

很多应用出于安全的考虑,会在每次进行登录时,让用户输入手机验证码,从而确定是否是用户本人。但是为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。例如一分钟不能超过 5 次。就可以通过设置redis键的过期时间搭配incr指令来完成限速。

参考

posted @ 2021-02-25 16:05  皮皮松  阅读(406)  评论(0编辑  收藏  举报