零基础学习Redis(6) -- string类型命令使用

redis中,不同的数据结构有不同的操作命令。

redis中的string是按照二进制存储的,不会对数据做任何编码转换。

1. set / get 命令

为了方便使用,redis提供了多个版本的get / set命令来操作字符串

1. set

set key value [expiration EX seconds | PX milliseconds] [NX | XX]

使用set时可以同时设置过期时间,EX以秒为单位,PX以毫秒为单位:

 [NX | XX]:

NX:如果key不存在,该语句才执行成功,否则返回nil

XX:如果key存在,该语句才执行成功,否则返回nil

2. get

get key

返回对应key的value,只有value是字符串类型才能成功

3. mset 

一次设置多个key

mset key1 value1 key2 value2 ...

4. mget

一次获取多个value,同样只能获取字符串类型

mget key1 key2 key3 ... 

5. setnx

相当于 set key value nx,只有key不存在才会设置成功,否则返回0

setnx key value

6. setex

相当于 set key value ex seconds,设置key的同时设置过期时间,单位是秒

setex key seconds value

7. psetex 

相当于 set key value ex milliseconds,设置key的同时设置过期时间,单位是豪秒

2. 数值操作命令 

前面我们说过,redis中的字符串存整数的时候是int类型编码,所以redis还提供了一些操作数值的命令

1. incr / incrby

incr key

对指定key的value + 1并返回+1后的值只有value是int编码时才生效:

decrby key n

对指定key的value + n并返回+n后的值只有value是int编码时才生效,n 可以为负数:

2. decr / decrby

decr key

对指定key的value - 1并返回-1后的值只有value是int编码时才生效:

decrby key n

对指定key的value - n并返回-n后的值只有value是int编码时才生效,n 可以为负数: 

3. incrbyfloat 

incrbyfloat key n

对指定key的value - n并返回-n后的值只有value是整数或小数时才生效,n 可以为小数/负数: 

注意:对于上面的5个命令,如果对应的key不存在会先创建一个value为0的key再执行操作

3. 字符串操作命令

1. append

append key value

给对应key的值拼接上一个字符串value,拼接成功返回拼接后的字符串字节数,只有string类型才能使用:

如果key不存在则相当于set命令 

2. getrange

getrange key start end

获取key对应value的[start,end]区间的字符串:

注意这里是闭区间

这里的start 和 end可以为负数,-1 相当于字符串的最后一个字符位置,-2相当于倒数第二个位置

特殊情况:

如果存的是中文,这里我使用的xshell是utf8编码,存中文时,会存入对应的utf8编码的二进制,由于utf8编码的每个汉字用3个字节表示,而getrange命令的下标单位是字节,所以使用getrange就存在从某个汉字中间开始获取/结尾字符串的情况:

这里如果想让redis显示解析后的字符可以在启动redis客户端的时候使用:

redis-cli --raw

3. setrange

setrange key offset value 

从指定下标开始替换字符串,返回替换后的长度

如果offerset超过了key中长度,会把之间的字节值填为0:

offerset也可以对不存在的key操作,在操作之前会创建一个value为空字符串的key:

4. strlen

strlen key 

获取字符串的长度,单位是字节:

4. 编码方式

1. Raw:

  • 适用场景:用于存储较大的字符串或非 ASCII 字符串。
  • 特点:原始编码方式直接存储字符串数据,没有压缩。适用于较大的字符串和二进制数据。

2. Embstr:

  • 适用场景:用于存储较小的字符串(通常长度不超过 44 字节)。
  • 特点:Embstr 将字符串数据直接嵌入到 Redis 对象结构中,减少了内存分配的开销和额外的内存碎片,提高了存取速度。

3. Int:

  • 适用场景:当字符串仅表示一个整数且其值在可表示的范围内时。
  • 特点:Int 编码方式将字符串存储为整数类型,节省内存并加快计算速度。例如,字符串“123”将被存储为整数 123。

可以通过命令查看value的实际编码方式:

object encoding key 

5. 应用场景

1. 缓存

作为缓存存储热点数据,常见的实现方式是把最近被访问的数据当作热点数据存到redis中,即当一个数据被访问,而这个数据又没在redis中,就把这个数据同时缓存到redis中,但是这样可能导致redis中数据越来越多,导致装不下,于是可以在把数据写给redis时设置一个过期时间。

2. 计数器

例如记录一个视频的点赞数,每有一个点赞就使用incr命名让点赞数+1,定期把点赞数同步到数据库即可,避免频繁操作硬盘。

3. 存储会话信息

分布式架构中可以用来存储会话信息,使多个服务器共享会话信息

4. 验证码

通常来说,验证码会有一个有效时间,这个时间就可以通过设置key的过期时间来完成,同时还可以在用户获取验证码时设置一个标记key,这个key存在时用户不能再次获取验证码,也就是限制获取验证码的时间间隔,防止恶意攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ting-yu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值