Redis中String数据类型的相关命令

Redis将数据以键值对的形式存储在内存之中,key均为String类型,value的类型各有差异。

Redis中的字符串是直接以二进制数据的方式存储的,单位是字节,redis只认识字节不认识字符,不做任何的编码转化,存的是啥,取出来就是啥,不仅可以存储文本文件(整数、字符串、json、xml等)还可以存储二进制文件(图片、音频、视频等),Redis对String类型的数据大小限制为512MB。一般来说,redis的乱码问题会比较少。

String相关命令预览:

命令执行效果时间复杂度
set key value设置键的值是valueO(1)
get key获取key的值O(1)
del key删除指定的keyO(1)
mset k1 v1 k2 v2 ...批量设置指定的键值O(k),k为键个数
mget k1 k2 ... 批量获取指定key的值O(k),k为键个数
incr key将指定key的值加1O(1)
decr key将指定key的值减1O(1)
incrby key n将指定key的值增加nO(1)
decrby key n将指定key的值减少nO(1)
incrbyfloat key n将指定key的值增加浮点数nO(1)
append key value追加value到指定key的值末尾O(1)
strlen key获取指定key的值的长度O(1)
setrange key offset value覆盖指定key从偏移量开始的部分值O(1) 或 O(N),取决于字符串长度
getrange key start end获取指定key的从起始到结束的部分值O(1) 或 O(N),取决于字符串长度

set & get :

当我们进入redi客户端输入set时,系统自动给提示:

系统提示我们set后面要填写两个参数key和value,和两个可选参数。

[EX seconds|PX milliseconds|KEEPTTL]:(中间使用的时“|”符号代表或者的意思)

  1. EX seconds:设置过期时间,单位是秒s;
  2. PX milliseconds:设置过期时间,单位是毫秒ms;
  3. KEEPTTL:当新增的key已经存在时,使用这个参数,新的value会覆盖旧的value,同时保持旧value的过期时间在新value上不变;

[NX|XX]:(同理也是或者的意思)

  1. NX:只在 key 不存在时才进行设置,即如果 key 之前已经存在,设置不执行;
  2. XX:只在 key 存在时才进进行设置,即如果 key 之前不存在,设置不执行;

注意:由于带选项的 SET 命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替,所以之后的版本中,Redis命令可能进行合并。注意不存在SETXX命令

get key //获取对应key的value值,仅支持获取String数据类型的value值,其他类型使用get会报错

FLUSHALL:

删除redis上所有的键值对(谨慎使用),可选参数 ASYNC

"ASYNC" 是一个缩写,表示在异步操作中执行某个任务。在计算机编程领域,异步操作指的是在后台执行任务,而不会阻塞主线程或程序的执行。相反,程序可以继续执行其他任务,而不需要等待异步操作完成。

在 Redis 中,"ASYNC" 通常用于表示在执行某个命令或操作时,使用异步方式进行处理。这意味着 Redis 将在后台执行命令,而不会阻塞其他操作或客户端的请求。

例如,在 Redis 中,执行 FLUSHALL 命令可以用于清空所有数据库中的数据。如果使用 "ASYNC" 参数,即执行 FLUSHALL ASYNC 命令,Redis 将以异步方式执行清空操作,而不会阻塞其他命令的执行或客户端的响应。

使用异步方式执行操作的好处是,它可以提高系统的响应性能和并发处理能力。它允许程序在执行耗时的操作时继续处理其他任务,从而提高系统的整体效率和吞吐量。

mset & mget:

一次行设置或者获取多个键值对数据。如果一次操作太多的键值对可能回导致redis阻塞。

setex & psetex:

设置键值对的同时添加过期时间,setex单位时秒s,psetex过期时间时毫秒ms;

incr & incrby & decr & decrby & incrbyflout:

  1. incr key :自增命令,key的编码方式为int,如果key不存在则会创建新的key,value为1。
  2. incrby key n:value值加n,也可以加负数,同样要求value实际编码为int,否则会报错。数值范围也不能超过64/8字节为可以表达的整数范围。
  3. decr key:自减
  4. decrby key n:value减n,也可以减去正数。
  5. incrbyflout key n:value增加n,n可以是双精度浮点数,没有与之对应的减浮点数命令,可以使用加上一个负数。

append:

追加value到指定key的值末尾,如果key对应的值不是String的话会报错,如果key不存在则会创建一个新的key,值为value参数。

append key value

strlen:

strlen key

获取到字符串长度,单位是字节。xshell终端默认是utf8编码,在utf8字符集中一个汉字是3个字节,所以下图最终的输出结果是9个字节,如果终端是unicode编码,unicode字符集中一个汉字是两个字节,那么下图输出的结果就应该是6个字节了。

xshll小技巧:ctrl+s 是冻结当前画面,防止屏幕滚动过快影响阅读;ctrl+q 解除冻结;

C++中字符串的长度以字节为单位。

Java中字符串的长度以字符为单位,一个字符是两个字节。

上图中,设置了name为中文,get name 得到的二进制编码,这就是文章开头所讲的,redis以二进制形式存储数据,以字节为单位,并不会进行编码转化,存的是啥,取出来的还是啥,设置name时存储的是中文的二进制编码,取出来的自然也是二进制编码,又因为不同的编码方式汉字的字节数不同,所以redis无法直接显示中文。想让显示中文,可以在启动redis的时候添加 --raw 选项。让redis客户端自动尝试翻译二进制数据。

 getrange:

getrange key start end // 获取区间内的子串,这里的区间是闭区间

redis中的区间指的都是闭区间,而计算机领域途中,大多数区间指的都是左闭右开区间。redis下标从0开始且支持负数,这一点和python一样。-1就是倒数第一个元素,0是第一个元素。需要注意的是如果是汉字进行剪切得到的就可能不是完整的汉字了,原因很简单,原本三个一组或者两个一组的字节被打乱了,redis客户端翻译的时候就出错了。C++中有一样的问题,Java中相当于String帮我们把这个问题处理了一下。

setrange:

setrange key offset value // offet是偏移量、value是用于替换的字符串,返回值为替换后字符串的长度。

如果新字符串过长会自动在旧字符串上追加,如果该位置没有字符,则是自动补为“\x00”(会被算在字符串长度之中),但是以redis-cli启动redis客户端显示“\x00\x00cccc”,以--raw形式启动redis则显示“cccc”,如下图:

和中文剪切一样,替换的时候也可能会导致中文二进制字节码顺序错位,翻译后中文显示不完整。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值