【Redis学习笔记】第二章【2.1】Redis数据类型--string

发布于:2023-01-21 ⋅ 阅读:(401) ⋅ 点赞:(0)


在这里插入图片描述

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