数据类型之字符串
命令:
1)strlen 查看字符串的长度
2)append 在字符串后增加内容
3) 当value的值是整数时,可以通过命令直接进行数学运算
incr 自增 ,返回最新的值。
decr 自减, 也返回最新的值。
incrby 增加,区别是增加计算的参数
decrby 减少,同上。
4) 范围内操作的命令
getrange key start end 获取从初始位置到结束位置的值(从0开始)类似subString
setrange key start newStr 设置从起始位置开始,替换指定位置为新的字符串
5)整合命令
setex = set + expire 将创建key和设置有效时间合并
setnx = set + exists = set if not exists 使用方式: setnx + key + value
如果key不存在,则设置数据,返回1。如果存在,不设置,返回0。
getset 先取出原来的值,再设置为新值 使用方式: getset + key + value 返回旧值。
6) 批量操作
mget = more get 使用方式 : mget + key1 + key2 + key3…… 参数接收多个key, 结果返回多个value
mset = more set 使用方式:mset + key1 + value1 + key2 + value2 一次设置多个key和value, 参数本身是个map
msetnx 使用方式同上。
原理:
redis的字符串是动态字符串,内部结构类似ArrayList。采用预分配冗余空间的方式减少内存的频繁分配。内部为字符串分配的实际空间一般高于字符串长度,当字符串长度<1MB时,扩容方式是直接加倍,如果>1MB,一次扩容只扩1MB,直到扩大到512MB。
数据类型之列表
命令:
1)存入与查询
lpush、rpush从左、右边依次存入;用lrange查看(输入索引范围,从0开始,-1代表到结尾)
2)lpop/rpop从左/右侧弹出,每次弹出一个
3)对list本身的操作
llen 查看长度
lindex 获取某一个位置的值,下角标从0开始
lrem 删除n个value的值 使用方式: lrem key N value
ltrim 截取某个范围的数据重新赋值给key 使用方式: ltrim key start end (下角标从0开始)
linsert 插入数据到某个位置的前后 使用方式: linsert key before/after oldValue
newValue 如果要插入数据到头部,还可以使用
lpushx, 插入数据到首部,如果要插入数据到尾部,可以使用 rpushx,
lset 可以更改指定位置的值 使用方式: lset key index value
原理:
底层是一个“快速链表”(quicklist)的结构,在列表元素较少时,使用连续的内存存储成压缩列表ziplist。当数据量较多时,改成quicklist, 也就是将多个ziplist使用双向指针串起来使用,以减少内存的碎片化。