数据类型之字符串

image.png
命令:
1)strlen 查看字符串的长度
image.png
2)append 在字符串后增加内容
image.png
3) 当value的值是整数时,可以通过命令直接进行数学运算
incr 自增 ,返回最新的值。
decr 自减, 也返回最新的值。
incrby 增加,区别是增加计算的参数
decrby 减少,同上。
image.png
4) 范围内操作的命令
getrange key start end 获取从初始位置到结束位置的值(从0开始)类似subString
image.png
setrange key start newStr 设置从起始位置开始,替换指定位置为新的字符串
image.png
5)整合命令
setex = set + expire 将创建key和设置有效时间合并
image.png
setnx = set + exists = set if not exists 使用方式: setnx + key + value
如果key不存在,则设置数据,返回1。如果存在,不设置,返回0。
image.png
getset 先取出原来的值,再设置为新值 使用方式: getset + key + value 返回旧值。
image.png
6) 批量操作
mget = more get 使用方式 : mget + key1 + key2 + key3…… 参数接收多个key, 结果返回多个value
mset = more set 使用方式:mset + key1 + value1 + key2 + value2 一次设置多个key和value, 参数本身是个map
image.png
msetnx 使用方式同上。
image.png
原理:
redis的字符串是动态字符串,内部结构类似ArrayList。采用预分配冗余空间的方式减少内存的频繁分配。内部为字符串分配的实际空间一般高于字符串长度,当字符串长度<1MB时,扩容方式是直接加倍,如果>1MB,一次扩容只扩1MB,直到扩大到512MB。

数据类型之列表

image.png
命令:
1)存入与查询
lpush、rpush从左、右边依次存入;用lrange查看(输入索引范围,从0开始,-1代表到结尾)
image.png
2)lpop/rpop从左/右侧弹出,每次弹出一个
image.png
3)对list本身的操作
llen 查看长度
image.png
lindex 获取某一个位置的值,下角标从0开始
image.png
lrem 删除n个value的值 使用方式: lrem key N value
image.png
ltrim 截取某个范围的数据重新赋值给key 使用方式: ltrim key start end (下角标从0开始)
image.png
linsert 插入数据到某个位置的前后 使用方式: linsert key before/after oldValue
newValue 如果要插入数据到头部,还可以使用
image.png
lpushx, 插入数据到首部,如果要插入数据到尾部,可以使用 rpushx,
image.png
lset 可以更改指定位置的值 使用方式: lset key index value
image.png
原理:
底层是一个“快速链表”(quicklist)的结构,在列表元素较少时,使用连续的内存存储成压缩列表ziplist。当数据量较多时,改成quicklist, 也就是将多个ziplist使用双向指针串起来使用,以减少内存的碎片化。