Redis 中的 String 类型及相关命令

1. 介绍

  1. Redis 中的 key 都是字符串类型
  2. Redis 中存储字符串是完全按照二进制流的形式保存的,所以 Redis 是不处理字符集编码的问题,客户端传入的命令中使用的是什么编码就采用什么编码,使得 Redis 能够处理各种类型的数据,包括文本、图片、音频等二进制数据 。

2. 常用命令

|---------------------------------|---------------------------------------------------------------------------------|---------------|
| 命令 | 执行效果 | 时间复杂度 |
| set key value key value... | 用于设置一个或多个键值对,如果键已经存在,会覆盖原来的值,相当于更新操作 | O (k),k 是键的个数 |
| get key | 用于获取指定键的值,如果键不存在,返回nil | O (1) |
| del key key... | 用于删除一个或多个指定的键,如果键不存在,会被忽略 | O (k),k 是键的个数 |
| mset key value key value... | 用于批量获取多个键的值,返回一个包含所有给定键的值的列表 | O (k),k 是键的个数 |
| mget key key... | 用于批量获取多个键的值,返回一个包含所有给定键的值的列表 | O (k),k 是键的个数 |
| incr key | 将指定键的值递增 1,如果键不存在,会先将其初始化为 0 再执行递增操作 | O (1) |
| decr key | 将指定键的值递减 1,如果键不存在,会先将其初始化为 0 再执行递减操作 | O (1) |
| incrby key n | 将指定键的值增加指定的整数n,如果键不存在,会先将其初始化为 0 再执行增加操作 | O (1) |
| decrby key n | 将指定键的值增加指定的整数n,如果键不存在,会先将其初始化为 0 再执行增加操作 | O (1) |
| incrbyfloat key n | 将指定键的值增加指定的整数n,如果键不存在,会先将其初始化为 0 再执行增加操作 | O (1) |
| append key value | 将指定的字符串值追加到指定键的现有值的末尾,如果键不存在,会先创建该键并将其值设置为指定的字符串 | O (1) |
| strlen key | 用于获取指定键的值的长度(单位字节),键不存在返回 0 | O (1) |
| setrange key offset value | 用于覆盖指定键的从指定偏移量offset开始的部分值,如果键不存在,会先创建一个足够长的字符串,并用空字符填充到偏移量offset,然后再进行覆盖操作 | O (1) |
| getrange key start end | 用于获取指定键的从指定起始位置start到结束位置end的部分值 | O (1) |

3. 内部编码

raw:最基本的字符串(相当于 C++ 中的 char 数组)

int:如果字符串为一个整数时,会采用 int 来存储

embstr:针对短字符进行的优化,提高存储和访问效率

4. 应用场景

  1. 缓存功能

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

此外,与 MySQL 等关系型数据库不同的是,Redis 没有表,字段这种命名空间,而且也没有对键名有强制要求,但是设计合理的键名可以有效的防止键冲突和项目的可维护性,推荐使用"业务名:对象名:唯一标识:属性"作为键名,如果键名过长,也可以使用一些缩写来替代,由于是在网络中进行数据传输的,键名过长还是会导致 Redis 性能下降的

  1. 共享 session

在分布式服务中,不能保证用户的访问请求每次都被分配到同一台服务器中,当用户刷新请求之后 session 就会丢失,为了解决这个问题,就可以使用 Redis 来讲用户的 session 信息进行统一管理,之后就可以集中从 Redis 中查询,更新 session 信息

  1. 手机验证码

手机的验证码也可以存储在 Redis 中,设置一个过期时间,超出时间验证码失效,同时,为了短信接口不会被频繁访问,也可以通过计数来对用户每分钟获取验证码进行限制

相关推荐
ClickHouseDB3 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_639906944 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
时间售卖铺5 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw5 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
数智园区合作社6 小时前
问数平台怎么把同一个指标锁成一个数
大数据·数据库·人工智能·ai
lbb 小魔仙6 小时前
Windows搭建PaddleOCR+飞书Webhook自动打卡通知机器人:识别、推送与远程触发完整教程
数据库·人工智能·prometheus·时序数据库
captain3767 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
心中有你02147 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
龙亘川8 小时前
综合素质评价业务建模:从过程性评价到成长档案全链路闭环
数据库·智慧城市·数据可视化
数据库小组8 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制