redis中String类型的使用

一、使用场景
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类型的使用

更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ ​ :开源吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱分享的代码君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值