Skip to content

02-string类型 ​

命令 ​

get 和 set ​

除了基本的用法, set 还有一系列的参数:

  • NX/XX: NX 如果没有那么就创建,有就不创建了,XX 则相反。这个不需要背,要用的时候测试一下就可以
  • EX: 设置有效时间,单位为秒

incr 和 decr ​

incr 是自增 1, decr 是自减 1 。

当然,它们还有衍生的,incrby/decrby 后面是添加数字的,如果这个 key 不存在,那么就默认是从 0 开始。

如果想要小数增加,那么就使用 incrbyfloat 来执行就可以了

append ​

用来追加字符串的

可以追加中文,但是保存的内容是 \xea 这样的16进制,

如果想要通过 get 获取到中文,那么就需要在连接服务器之前就需要添加 --raw 这个参数命令

setrange 和 getrange ​

setrange 是表示设置一段范围内的内容

  • key 不存在:那么就会在前面添加 \x00 用来占位
  • value 长度过长:那么就会设置一段区间内

getrange 也是类似,获取一段范围内的内容,但是需要注意的是它是前闭后闭的,而且它像 Python 那样支持负数

strlen ​

返回的字符串的长度

编码方式 ​

在 Redis 中 string 类型有三种编码方式:embstr, int 和 raw

  • int: 它是存储 8 字节 64 位的整数,等价于 Java 中的 long 类型
  • embstr: 在小于 39 字节的情况下,是这个压缩的类型
  • raw: 在大于 39 字节的情况下,会使用这个类型

不需要记住 39 这个数字,而是要着重理解为什么是 39 这个数字,因为这个数字是可以配置的,在不同的场景下,配置的数字一般是不同的

应用场景 ​

缓存 ​

缓存不仅仅是 string 类型的应用场景,而且也是 hash/list 等主要的应用场景。Redis 主要的应用场景就是缓存

缓存一般存储的都是热点数据,这些热点数据可以通过一些方法来获取到:

  • 存储最近从 MySQL 中查询到的数据
  • 通过统计,统计最近一段时间前 20% 的数据
  • 通过实验来统计

为了防止数据过多导致 Redis 宕机,一般会给相关的值设置一定的过期时间,这样在存储一段时间后,如果不访问,没有更新 ttl, 那么就会自动删除

它们的执行逻辑基本如下:

  1. 从 Redis 中获取
  2. 找不到的话那么就从 MySQL 中获取,并且把查询到的对象序列化,存储到 Redis 中
  3. 找的到的话就直接从 Redis 中获取,把获取到的字符串反序列化为对象

计数 ​

计数是统计次数,比如播放数/点赞数/访问数等内容。

由于 Redis 是不擅长统计,因此一般会配合像 MySQL 这样的其他服务来统计内容。而由于这些内容相对来说对实时性要求没那么高,因此是采用异步同步的策略

异步同步是数据不会实施响应,不会像修改昵称那样修改完后就可以直接响应,一般会有一段时间后才会同步。

举一个比较经典的例子:B 站在某一个比较大的 UP 上传一个视频后,会出现点赞比播放数多很多的情况,通常是几十个点赞,然后1播放。这就是异步方式来同步

为了增加可靠性,一般情况下数据不会只存储在内存中或者只存储在 Redis 中,比如采用 “321”的备份策略,对数据经行持久化存储

Session 存储 ​

在比较大的业务中,一般都是集群来部署服务器的,因此服务器是有很多台,如果像之前 Java 那样使用 Session,不同机器就会识别不了导致用户登录认证失败。

为了解决这个问题,就可以使用 Redis 来管理 Session 会话,这样不同机器只需要查询 Redis 上有没有相关的内容就可以知道登录状态

验证码 ​

像验证码这样有时效性的内容就很适合使用 Redis 来存储

执行的步骤如下:

  1. 先获取当前验证码的执行次数,如果执行的次数过多,那么就不执行
  2. 如果满足条件,那么就生成相关的验证码,并且统计执行的次数,把这些内容存储在 Redis 中,这些内容都要设置过期时间
  3. 校验验证码,根据用户 Id 查询到相关的内容,如果有验证码,校验一下,如果校验成功,生成 JWT 令牌并且删除相关的验证码