String类型
String类型是Redis的最基础类型,最大能存储512MB,其中存储值可以是最简单的字符串、复杂的 xml/json的字符串、二进制图像或者音频的字符串、以及是数字的字符串。
## String数据类型与结构
- 基本操作
set 命令操作
- set key value [ex | px | nx | xx]
- ex:设置key过期时间为 N 秒
- px:设置key过期时间为 N 毫秒
- nx:当键不存在时才对键进行设置操作
- xx:当键存在时才对键进行设置操作
setnx 命令
当key不存在的时候才可以怼键进行设置
若key已经存在,则不做任何操作
setex 命令
将key设置值,并且同时设置key有效时间为seconde秒钟
如果key存在,则会覆盖掉原来的值
psetx命令
与setex命令差不多。但这是设置key有效时间为毫秒
get 命令
获取键的值。如果值不存在。则返回nil。如果值是非字符串。则返回一个错误
getset 命令
设置key的值为value,并返回被设置之前旧的值
strlen
获取key的值的字符串长度
append
当key存在时,在指定key字符串后面追加新的字符串。当key不存在时,则新增一个key, 值为追加字符串。执行成功后返回字符串长度。
incr 命令
当key不存在时,新增一个key并默认设置值为。当key存在时先初始化值为0后执行incr操作,则当前值自动 +1;值可以为负数,为负数时则执行减操作
incrby 命令
执行操作与incr一样。不同的地方在于,incrby可以自定义增加值的大小。。值为任意数字。当值不是数字时。则返回一个错误
incrbyfloat
为key值加上浮点型数量
decr
incr差不多。不同的是,每执行一次,值减1;可负数。当存储的值不能解析为数字时,则返回一个错误
decrby
将key值的数量减去1;当key不存在时,首先初始化值为0,在执行decrby操作,可负数。当执行key存储值为非数字时,则返回一个错误
mset 命令
可以同时为多个key设置值。mset key value [key value key value,...]
msetnx 命令
当所有key不存在时,则为所有给定键设置值。当给定值只有一个已经存在时,命令会拒绝所有给定值设置值操作。msetnx属于原子性操作。要么全部设置成功。要不就全部不做设置。不可能出现第三种情况。
mget 命令
返回给定一个key或多个key的值。当给定key里某个key不存在时。则
2. string动态字符串结构
SDS(简单动态字符串),是Redis的一种基本数据结构。主要用于存储字符串和整数。
struct sdshdr {
#len代表buf数组中已使用的字符长度
int len;
#free代表buf数组中未使用的字符长度
int free;
#buf是数组,注意末尾保存了一个空字符 ‘\0’
char buf[];
};
共有5种类型的SDS:
1.Sdshdr5
2.Sdshdr8
3.Sdshdr16
4.Sdshdr32
5.Sdshdr64
我们可以再SDS种新增一个type字段来标识类型。具体可以向带翅膀的猫学习数据结构源码解析SDS
String类型应用场景
- Session共享-Session分散管理
- Session共享-Redis集中管理Session
- 计数器-商品浏览量
- String类型里的incr和decr命令的作用是将存储中的数字值加1或减1.这两个具有原子性,总能安全的进行加减操作。可以用作技术,一般用于评论数,点赞数,收藏数,分享数,销量,评价数等。
- 限速
- 很多应用登录时,处于返券考虑会让用户进行短信验证,从而确认是否本人操作。但是为了短信接口不被频繁访问,会限制用户一定时间内的访问次数。
List类型
list是可以存储多列有序的字符串,按照插入顺序排序,它可以在列表的头部添加数据,可以从列表的尾部添加数据。也可以从头部进行取数据。甚至可以从尾部进行取数据。一个列表对多可以包含
- 1 个元素
List数据类型与结构
List类型结构实现主要依据是什么?
1.链表
2.压缩列表
压缩列表的构成
Zlbytes:压缩列表占用的内存字节数
Zltail:压缩列表尾节点距离起始地址又多少字节
Zllen:压缩列表字节点数
entryX:压缩列表节点
Zlend:压缩列表末端
压缩列表节点的构成
Pervious_entry_length:压缩列表前一个节点的长度
Encoding:当前节点的值类型与长度
Content:当前节点值
压缩列表的遍历(表尾到表头)
List类型应用场景
1.秒杀抢购
需要解决问题:
1.商品超卖
2.同时抢购产生高并发
3.恶意请求
2.排行榜
商品每日销量,学生月考排名,主播年终排名等