一、使用场景
1、保存状态
如保存用户登录的会话信息,key的形式可以是session:00000001:23465335433223,其中“session”是固定的字符串,“00000001”为用户当次登录的唯一token,“23465335433223”为登录的时间戳,值可以为用户信息JSON,也可以为权限JSON。
再比如记录某个车次的售票情况,key的形式可以是k9:20220810:100,其中“k9”为车次,“20220810”为售票日期,“100”为总座位数,值为座位售出状态,每个座位对应一个bit位,0表示未售出,1表示售出,通过座位号可以修改对应bit位的值。
2、统计
比如统计某一活动加参的人数,某个直播观看的人次,双11总成交金额等
3、限制访问
比如限制一个用户只能在一个设备上登录,在会话key中添加客户端id或是用户id等信息,如果id存在,则修改原来的key,或是不允许登录
比如发送短信,可以为key设置过期时长为1分钟。如果key存在,则不能发送短信
再比如投票,一个用户一天只能投5票,key为用户标识和日期,值为次数,过期时长为到第二天的第1秒,如果key存在并且值等于5则不能再投票
二、添加值
1、一个添加一个键值对
当添加成功时返回状态OK,如果key已存在,则替换原来的值
语法
SET key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
其中
nx表示仅当key不存在时才添加值
xx表示仅当key存在时才修改值
get表示返回key的原值,当key不存在时返回null,如果存在,则返回原来的值
ex表示以秒为单位设置过期时间
px表示以毫秒为单位设置过期时间
exat和pxat为使用 UNIX 时间戳设置过期时间
keepttl是Redis 6.0的新特性,是指“保留生存时间”,既重复set时,保留旧值的过期时间
示例
//状态,服务是否开启,true表示开启
set enabledServer "true"//当前登录用户信息,键的格式为:登录名:姓名:角色:登录时间戳
set root:管理员:admin:2100010234434 1
2、一次添加多个键值对
当添加成功时返回状态OK,如果key已存在,则替换原来的值
语法
MSET key value [key value ...]
示例
//设置open和close的值,分别为true和false
mset open true close false
3、添加时设置保存时长
设置过期时间的单位为秒
语法
SETEX key seconds value
示例
//设置open的过期时间为100秒,值为false
setex open 100 false
4、不存在时才添加一个
语法
SETNX key value
示例
//如果open不存在,则添加open,值为true
setnx open true
5、不存在时添加多个
只有当所有key都不存在时才添加成功
语法
MSETNX key value [key value ...]
示例
//添加open和close,值分别为false和true
msetnx open false close true
6、在值的末尾追加字符串
如果key存在,则在对应的key的值后追加新的值,如果不存在,则添加新的key
语法
append key value
示例
//为open的值追加“|false”,使值为“true|false”
append open |false
7、添加并返回原值
如果key不存在,则返回空值,如果存在,则修改值,并返回原来的值
语法
getset key value
示例
//设置open的值为false,返回原来的值“true|false”
getset open false
三、查找
1、查看指定key的值
语法
get key
示例
//获取服务器的开启状态
get enabledServer
2、查看多个键的值
语法
MGET key1 [key2..]
示例
//获取open和close的值
mget open close
3、获取值的长度
语法
strlen key
示例
strlen open
4、截取值指定范围的字符串
如果是中文,一个中文点两个位置
语法
getrange key start end
其中
start为开始位置,从0开始
end为结束位置
示例
//添加企业信息
set info 湖南省创蓝信息科技有限公司
//获取“创蓝信息”
getrange info 6 13
四、值的增量
增量可用于做统计,值的字面量必须是数值。
1、将值增加1
语法
incr key
示例
incr num
2、将值减1
语法
decr key
示例
decr num
3、将增加指定的量
语法
incrby key increment
示例
//在原值上增加2
incrby num 2
4、将增加指定的浮点量
语法
incrbyfloat key increment
示例
//在原值上增加.04
incrbyfloat num 0.4
5、将减少指定的量
语法
decrby key decrement
示例
//在原值上减少2
decrby num 2
五、位操作
字符串的值最终会转换成二进制数据进行保存,二进制值的每一位使用0或1表示。正好可以分别表示false或true。
因此使用二进制位来实现售票状态(每个座位号对应一bit)、用户活跃状态等功能可以大量节省空间(每天对应一bit),如果要获得整个结果,无论数据有多大,也只是获取一个字符串而已。时间复杂度总是O(1)。
1、设置指定bit位的值
设置指定位(bit)的值,返回此位(bit)原来的值
语法
setbit key offset value
其中
offset为二进制值的第几位,从0开始
value为offset位的值,只能是1或者0
示例
//添加str 值为 a,a的asc码为97,转换成进进制为01100001
set str a//修改第7位的值为1,使修改后的二进制数为01100011,对应asc码为99,为字母c
setbit str 6 1//返回 c
get str
2、获取指定位的值
语法
betbit key offset
示例
//获取第7位(bit)的值
getbit str 6
3、获取为1的位(bit)数
获取指定范围内的值为1的位(bit)的数量
语法
bitcount key [start end [byte | bit]]
其中
strat为开始统计的位置,从0开始计算,可以为负数,-1为最后一个位置
end为结束统计的位置,从0开始计算,可以为负数,-1为最后一个位置
byte为strat 和end的单位为字节,如果不设置默认为byte,比如a,按byte计算长度只有1,所以-1表示第1个字节。
bit为start和end的单位为位,比如a,按bit计算长度为8,所以-1表示第8位
示例
//str的值为a,长度为1个字节, start为1表示从第二个字节开始,-1表示最后一个字节,因此返回结果为0
bitcount str 1 -1//str的值为a,长度为8位,start为1表示从第二个bit开始,-1表示最后一个字节,因此返回结果为4
bitcount str 1 -1 bit
4、获取字符串里面第一个被设置为1或者0的bit位,
语法
bitpos key value
示例
//获取第一个1开始的位置位
bitpos str 1
5、对位进行批量操作
用于从指定位置开始获取或替换指定数量的位(bit),可是在指定位进行增量操作
1)从指定位(bit)开始获取指定长度的位(bit),返回获取的二进制的十进制表示
语法
bitfield key get [len] [offset]
其中
len为要获取的长度,u开头的表示无符号,i开头的表示有符号,即当第一位为1时,返回的值为负数
offset为从此指定的位开始向后获取
示例
//修改str的值为abcd
set str abcd
//获取第二个字符的编码,结果为98
bitfield str get u8 8
2)从指定位(bit)开始替换指定数量位(bit)的值,如果超出总长度,超出度部为追加
语法
bitfield key set [len] [offset] [value]
示例
//为str添加第四个字符为d
bitfield str set u8 24 100//返回结果为abcd
get str
3)从指定位开始把指定长度的位的值都加上0或是1,此处要注意的是,加0表示不改变,加1表示把对应位的值改为0,即加1的时候不会进位
语法
bitfield key incrby len offset value
示例
//设置str的值为c, 二进制为01100011
set str c//最后一位加1,二进制为01100010
bitfield str incrby u1 7 1//返回b
get str
6、对多个key的值进行二进制位元运算
语法
bitop oper destkey key1 key2
其中
destkey为用于保存计算结果的key
key1和key2为参与计算的key
oper为位元计算方式,有 AND(与) 、 OR(或) 、 NOT(非) 、 XOR(异或)运算
示例
//a的二进制值为01100001
set str1 a//b的二进制值为01100010
set str2 b//进行与运算(同位的值都为1时结果为1),把结果保存到str3中,计算结果为01100000
bitop and str3 str1 str2//返回`
get str3//进行或运算(同位的值只在有一个为1,结果为1),把结果保存到str3中,计算结果为01100011
bitop or str3 str1 str2//返回结果为c
get str3//进行异或运算(同位的值相同结果为0,不同结果为1),把结果保存到str3中,计算结果为00000011
bitop xor str3 str1 str2//返回结果为\x03
get str3
文章来源于哔站《redis中String类型的使用》
更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频
更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ :开源吧