redis的存储模式
redis数据库数据存储模式是基于键值基本存储原理的基础上,进行细化分类,构建了具有自身特点的数据结构类型
redis提供的数据结构类型已经达到了8种
字符串string、列表list、集合set、散列表hash、有序集合Sorted set 、位图Bitmap、Hyperloglog、地理空间Geospatial
redis存储模式之字符串string
字符串内容是二进制安全的,可以把数字、文本、图片、视频等存在value中
1.键命名要容易阅读,方便维护,键名不要过长,会影响执行效率
2.值最大长度不要超过512M
3.键可以用A:adress方式增加键的提示信息
基本的字符串操作命令:
Set:为指定一个键设置对应的值,若值已经存在则覆盖 set 键1 "值1”
MSet:对多个建设置对应的值,若值已经存在则覆盖 eg:mset 键1 值1 键2 值2
返回值总是OK,该命令不会出现执行失败
MSetNX:对多个键设置任意的值,该命令不予许指定的任意一个键已经在内存中建立,如果有一个已经建立,则该命令执行失败。他是原子操作,所执行的命令内容要多都成功,要么都失败
使用于通过设置不同的键来表示一个唯一的对象的不同字段
eg:msetNX key1 value1 key2 value2 key3 value3 成功返回1,失败返回0
PS:
NX:如果指定的键不存在,仅建立键名
XX:指定的键存在时才能设置对应的值
Get: 指定需要读取字符串的键 Get key
指定键不存在时,返回nil
PS:若get命令得到的结果未十六进制的值(一般在含中文值情况下出现),可以通过启动redis-cli时在其后面加上--raw参数解决
MGet:指定需要读取字符串的键,键允许多key的指定
返回所有指定键对应的值,用列表形式显示。对于不是string值或者不存在的键,都返回nil
eg:mset key1 key2 key3
Del:指定需要删除的字符串的键,允许一次删除多个
返回值:被删除字符串的个数
还可以删除其他类型的数据结构,如列表、集合、散列等
eg:del key1 key2
StrLen:指定需要获取长度的字符串键
返回值:返回字符串长度,如果值为非字符串,则返回错误信息,如果键不存在,则返回0
eg: strlen key1
修改字符串操作命令:
Append:追加字符串,当字符串指定键存在时,把新字符串追加到现有值的后面;若键不存在,则建立新的字符串
append key value
GetRange:得到指定范围的字符串的子字符串
redis 2.0以前截取字符串是用的substr
getRange key start end
getrange key1 0 -1
-1代表字符串最后一个位置,0代表字符串第一个位置
GetSet:得到指定字符串键的旧值,然后为键设置新值
getset key value
value为键设置的新值,返回值是返回之前的旧值,若指定键不存在则返回nil
主要应用场景为实现支持重置的计数功能,可与incr命令配合使用
SetRange:替换指定字符串的值
setrange key offset value
offset为字符串需要修改的开始位置,value为新的子串值,如果offset位置超过了指定字符串的长度,超出部分补0
eg: setrange a “小心”
get a
"\x00\x00\x00小心"
一个\x00代表一个0
ps:
由于redis中字符串大小限制在512M以内,所以offset不能超过536870911位
当指定的键在没有值的情况下,在指定位置设置新值,redis需要立即分配内存,这有可能会导致服务阻塞现象的出现。新建立值长度越大需要消耗的时间越多,一般消耗时间在几百毫秒到几毫秒之间
修改数字值的操作命令
redis为字符串值为数字的数据提供了专门的修改操作命令
Decr :对整数做原子减1操作
decr key
该字符串的值必须为整型,若key不存在,则新建键,且值设置为0
返回值:返回减1后的值,若指定的键的字符串值存储的是非整型数据,则该命令返回错误信息
set key1 10
decr key1
(integer) 9
ps:
decr命令最大支持64位有符号的整型数字 ,其实是decrease(减少)的缩写
decrby: 对整数做原子减指定数操作
decrby key decrement
decrement为需要减少的整数数量,若key不存在,则新建键,且值设置为0
返回值:返回减少对应数量的值
eg:set key1 10
decrby key1 5
(integer) 5
incr:对整数做原子加1操作
ps:
incr命令最大支持64位有符号整数,原子递增操作最常用的使用场景是计数器,特定场景的限速器
incrby:对整数做原子加指定数操作
incrbyFloat:对浮点数做原子加指定数操作
incrbyfloat key decremnet
键所对应的值必须是浮点数,并且存在在string中,decrement为需要增加的浮点数
返回值:返回值增加的浮点数值
ps:
包含如下任意一个条件,该命令将返回错误信息
key包含非法值(不是一个string)
当前的值增加指定数后,不能解析为一个双精度的浮点数(超出精度范围),无论个计算内部精度如何,输出精度都固定为小数点后17位