1、Redis数据存储类型
Redis做为缓存使用,涉及的业务数据譬如:
- 秒杀、双十一、抢票等业务
- 突发高频访问的数据,如突发的时政要闻
- 高频、复杂的统计数据,如大直播间在线人数、投票排行榜等高频变动的数据
除了以上经典业务场景,还有三个附加功能:
- 单服务器升级集群
- Session管理
- Token管理
对应于以上业务场景,Redis给出物种常用数据类型
- string 字符串
- hash 哈希
- list 列表
- set 集合
- sorted_set 有序集合
所有的数据都是采用 key : value 的形式存储,数据类型是指 value 部分的类型,key 部分永远都是字符串!!
2、string
一个存储空间保存一个数据,如果字符串是一个整数的形式,则它也可以当作数字一样被操作。
3、string类型数据的基本操作指令
添加/修改数据
set key value
获取数据
get key
删除数据
del key
添加/修改多个数据 (m即Multiple)
mset key1 value1 key2 value2 key3 value3
获取多个数据
mget key1 key2 key3 key4
获取数据字符串长度
strlen key
追加信息到原始信息后面(存在则追加,不存在则新建)
append key value
实例:
127.0.0.1:6379> set name 9527
OK
(0.88s)
127.0.0.1:6379> get name
"9527"
127.0.0.1:6379> del name
(integer) 1 //1代表成功,0代表失败
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> del name
(integer) 0
127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
127.0.0.1:6379> mget b c
1) "2"
2) "3"
127.0.0.1:6379> strlen d
(integer) 1
127.0.0.1:6379> append a 314
(integer) 4
127.0.0.1:6379> get a
"1314"
注**
set和mset在不同的数据量下,其效率性能谁高谁低不一定,再譬如单线程下,一下mset大量数据,则容易造成阻塞,孰优孰劣应当以实际生产环境为准。
4、string类型数据的扩展
随着数据的增多,将一个大的表或库,分表分库,是一个常规选择,那如何保证,分表过程中自增主键的不重复性呢?
Oracle 数据库具有 sequence 设定,可以解决该问题,但是 MySQL数据库并不具有类似的机
制。在这个背景下,看Redis的string类型的数据扩展操作:
设置数值数据增加指定范围的值:
增加1,默认
incr key
增加指定整数大小
incrby key increment
增加指定小数大小
incrbyfloat key increment
设置数值数据减少指定范围的值:
减少1
decr key
减少指定数值
decrby key increment
实例:
127.0.0.1:6379> get b
"2"
127.0.0.1:6379> incr b
(integer) 3
127.0.0.1:6379> incrby b 10
(integer) 13
127.0.0.1:6379> decrby b -1
(integer) 14
127.0.0.1:6379> decrby b -1.1
(error) ERR value is not an integer or out of range
注**
- string在Redis中,在遇到增减操作时,就会被当作一个数值,但还是一个字符串
- redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
- 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错
127.0.0.1:6379> set str a
OK
127.0.0.1:6379> incr str
(error) ERR value is not an integer or out of range
5、string类型设置数据生命周期
业务场景举例:
- 海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。
- 电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门。
以上,数据均需要控制存在的时间。
设置数据生命周期
秒级:
setex key seconds value
毫秒级:
psetex key milliseconds value
redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
6、key的命名规范
表名:主键名:主键值:字段名
,如:
user: uid: 9527: password
news: id :2022813: title
127.0.0.1:6379> set user:id:9527:fans 1000000
OK
127.0.0.1:6379> incr user:id:9527:fans
(integer) 1000001
values中也可以json格式存储信息:
127.0.0.1:6379> set user:id:001 {name:9527,age:22,sex:1}
OK