共计 2310 个字符,预计需要花费 6 分钟才能阅读完成。
redis 最常利用于各种构造类型和非构造类型高热度数据的拜访减速。在本文,咱们将从 redis 中 string 数据类型开始理解 redis 对数据的存取操作。本文是该系列的第四篇原创笔记,如果你还没浏览之前的局部,能够通过以下链接进行浏览
- 01-redis 入门常识第 1 篇 -redis 简介
- 02-redis 入门常识第 2 篇 -redis 的装置与测试
- 03-redis 入门常识第 3 篇 -redis 的基本操作与数据类型
1. string 类型的特色
- 存储的数据:单个数据,最简略的数据类型,也是最罕用的存储类型
- 存储数据的格局:一个存储空间保留一个数据
- 存储空间:通常应用字符串,如果存储的字符是数值的模式,能够应用数值操作(比方减少指定值、缩小指定值)的性能
2. string 类型的基本操作
- 增加 / 批改数据
set key value
- 获取数据
get key
- 删除数据
del key
- 增加 / 批改多个数据(M 即 multiple)
mset key1 value1 key2 value2 ...
- 获取多个数据
mget key1 key2 ...
- 获取数据字符个数
strlen key
- 追加信息到原始数据开端(如原始存在则追加,否则新建)
如果 key 曾经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值(value)的开端。
append key value
3. 单数据操作 与 多数据操作的比照
3.1. 指令
- 设置单条数据:
set key value
- 设置多条数据:
mset key1 value1 key2 value2
3.2. 操作时间差
假如每执行一个动作须要一个工夫单位,那么执行一次命令,须要的工夫单位为:发送执行命令(往)的工夫 + 执行的工夫 + 返回后果(返)的工夫,一共须要 3 个工夫单位。
- 单数据操作,执行 3 条指令的执行过程:往返 6 个单位 + 执行 3 个
- 多数据操作,执行 3 条指令的执行过程:往返 2 个单位 + 执行 3 个
4. string 数值类型数据的操作
设置数值数据减少指定的值
# 对 key 的值减少 1 个单位
incr key
# 指定对 key 的值减少 increment 个单位
incrby key increment
# 指定对 key 的值减少 increment 值,increment 能够是 float 类型的值
incrbyfloat key increment
设置数值数据缩小指定的值
# 对 key 的值缩小 1 个单位
decr key
# 指定对 key 的值减小 increment 个单位
decrby key increment
- string 在 redis 中外部存储默认就是一个字符串,当遇到增减类操作 incr,decr 时会转成数值型进行计算。
- redis 所有的操作都是原子性的,采纳单线程解决所有的业务,命令是一个一个执行的,因而无需思考并发带来的数据影响。
留神 :按数值进行操作的数据,如果原始数据不能转成数值,或超过 redis 数值的下限范畴,将会报错。
redis 中数值数据最大值为 9223372036854775807(java 中 long 型数据的最大值,Long.MAX_VALUE)
在大型企业级利用中,因为大量的数据,所以通常应用分表的形式存储数据。在应用多张表存储同类型数据中,对应的主键 id 必须保障统一性,不能反复。Oracle 数据库具备 sequence 设定,能够解决该问题,然而 MySQL 数据库并不具备此类机制。那么咱们就能够通过 string 数值类型的减少操作取得下一个值,再作为关系数据库中的主键值。
5. 设置 string 类型数据的有效期
以下有几个例子:
(1):“最强女生”启动海选投票,只能通过微信投票,每个微信号每 4 个小时只能投 1 票。
(2):电商商家开启热门商品举荐,热门商品不能始终处于热门期,每种商品热门期维持 3 天,3 天后主动勾销热门。
(3):新闻网站会呈现热点新闻,热点新闻最大的特色是实效性,如何自动控制热点新闻的时效性。
- 解决方案:设置数据具备指定的生命周期
# 以秒为单位设置 key 的值
setex key seconds value
# 以毫秒为单位设置 key 的值
psetex key millisenconds value
- 查看 key 有生命周期的数据
# 以秒为单位查问 key 残余的生命周期
ttl key
# 以毫秒为单位查问 key 残余的生命周期
pttl key
redis 控制数据的生命周期,通过数据是否生效管制业务行为,实用于有所具备时效性限定管制的操作。
6. redis 操作反馈
数据类型操作不胜利的反馈与数据失常操作的反馈的有查问,如下
- 示意运行后果是否胜利
(integer)0 -> false 失败
(integer)1 -> true 胜利
- 示意后果值
(integer)3 -> 3 个
(integer)1 -> 1 个
- 示意数据未获取到
(nil)等同于 null
数据最大存储量为 512m,而数值计算最大范畴(java 中的 long 的最大值)为 -9223372036854775807 到 9223372036854775807
7. redis 中 key 的命名倡议
redis 用于缓存热点数据,但数据最终存储在数据库中,redis 个别用于关系型数据库中的数据缓存。所以在给缓存 key 命名时最好要语意化,规范化。如下列 key -> value
键值对例子。
- 用户的粉丝数:
user:id:100:fans -> 123355
- 用户的博客数:
user:id:100:blogs -> 99
- 用户的关注数:
user:id:100:focus -> 83
下面的示例是存储用户的单个字段信息,在理论中,咱们能够须要存储用户的实现信息,那么中通常以 json 格局存储用户信息,如下 key -> value
示例
- 用户的信息:
user:id:100 -> {"id":100,"name":"春晚","fans":12355,"blogs":99,"focus:83}