所在位置:首页 → 游戏资讯 → redis查看value-redis查看value命令

redis查看value-redis查看value命令

发布: 更新时间:2023-02-27 01:51:26

本文目录一览:

  • 1、Redis | Redis 字符串相关命令
  • 2、redis里怎么知道key的value大小?或者按照value的大小排序
  • 3、Redis 如何设置包含空格的Value
  • 4、redis 能不能根据 value 取 key

Redis | Redis 字符串相关命令

Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 字符串 相关的命令,也就是关于 Strings 相关的命令,如下图。

上图中用红色圈中的部分,就是关于 字符串 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。

在按下回车后,可以看到相应分类命令的说明,如下图。

图中就是部分关于 Strings 相关的部分命令。

常用 Strings 相关命令

为了大家能够直接复制命令进行测试,下面我就不截图了。

1、set 命令

set 命令的作用是 设置一个 key 的 value 值

设置 key 对应的字符串类型

上面的命令分别对 key1 设置为 value1,对 key2 设置为 value2。

set 命令除了基本的用法外,还有几个参数,先来说一下 nx 和 xx 两个参数。

nx 表示 key 不存在时,执行操作

xx 表示 Key 存在时,执行操作

命令 set k1 v1 nx 表示,当 k1 不存在时,给 k1 设置字符串值为 v1,此时 k1 并不存在,因此该命令被执行;

命令 set k2 v2 xx 表示,当 k2 存在时,给 k2 设置字符串值为 v2,此时 k2 并不存在,因此该命令没有被执行

再介绍另外两个参数,分别是 ex 和 px,ex 和 px 是在进行 set 命令时可以设置过期时间的命令

ex 表示 设置的过期时间以秒为单位

px 表示 设置的过期时间以毫秒为单位

2、setnx 命令

setnx 命令的作用是 当指定的键不存在时给该键设置一个值

该命令类似 set 命令附带了 nx 参数

在上面的命令中,setnx k1 value1,由于 k1 存在,因此命令没有被执行,setnx k2 value2,由于 k2 不存在,因此命令被执行。

当命令执行成功,返回值为 1

当命令执行不成功,返回值为 0

3、get 命令

get 命令的作用是 获取指定 key 的值

该命令已经被多次使用了,演示如下:

4、getset 命令

getset 命令的作用是 设置一个 key 的 value,并获取设置前的值

该命令相当于 先对指定的 key 进行一次 get 操作,再执行一次 set 操作,两个命令合并,可以保证原子性。

5、mget 命令

mget 命令的作用是 一次获取多个 key 的值,如果 key 不存在则返回 nil

可以看到,key3 是不存在的,因此 key3 返回的值是 nil

6、mset 命令

mset 命令的作用是 设置多个key value

7、msetnx 命令

msetnx 命令的作用是 设置多个key value,仅当key不存在时

可以看出,msetnx k4 vv4 k5 vv5 时,此时不存在 k4 和 k5 因此该命令执行成功,在执行 msetnx k4 v4 k5 v5 k6 v6 时,由于 k4 和 k5 已经存在,则使得这条命令执行失败,因此 k4 和 k5 的值仍然是 vv4 和 vv5,并且没有 k6 这个 key。

8、incr 命令

incr 命令的作用是 执行原子加1操作

9、decr 命令

decr 命令的作用是 整数原子减1

10、incrby 命令

incrby 命令的作用是 执行原子增加一个整数

11、decrby 命令

decrby 命令的作用是 原子减指定的整数

12、incrbyfloat 命令

incrbyfloat 命令的作用是 执行原子增加一个浮点数

13、setrange 命令

setrange 命令的作用是 修改字符串指定偏移的值

字符串的偏移从 0 开始,hello 的长度为 5,最后 1 个下标为 4,当我们 setrange kstr 6 x 时,我们将 kstr 下标 6 的位置设置为了 x,因此在下标 5 的位置处给了一个 x00,即 ASCII 码的 0。

14、getrange 命令

getrange 命令的作用是 获取存储在key上的值的一个子字符串

下标 -1 为最后一个下标,下标 -2 为倒数第二个下标

15、append 命令

append 命令的作用是 追加一个值到key上

总结

这些基础的命令当中,除了可以当作基础的操作 字符串 的命令来用,也有其他方面的用处,比如在高并发当中可以用来设置锁等。把今天整理的命令完善了一个思维导图,图片如下。

redis里怎么知道key的value大小?或者按照value的大小排序

redis是一个key-value存储系统和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。

与memcached一样,为了保证效率,数据都是缓存在内存中。

区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 如何设置包含空格的Value

Redis对于一个做后端的人来说,应该再熟悉不过了,但是最近工作中折腾一个问题许久,其实问题不难,已经不是第一次遇到,以前总没有寻根问源,用其他方式规避了问题,导致一而再的犯同样的错误,着实需要反思下,因此有了此文。

Redis 中 string 类型数据结构在设置一对 key-value 的时候, value 中有空格。我使用的 Redis API 接口是已经封装了一层的,只用传入一个命令字符串就行,因此我会先将命令字符串拼接好,然后调用相应的接口即可,然后呢,操作就失败了。。。

Redis 的 API 接口在解析字符串的时候,会将空格作为分隔符分割命令,从而导致命令的参数个不对。

比如: SET k "V V",分割后就变为了 SET 、 K 、 V 、 V 4个块,最终 Redis 执行命令的时候就会判定语法错误,因为参数超过了 SET 命令的限制要求。

刚遇到这个问题,第一反应就是去处理命令字符串,将字符串中value部分特殊处理,比如用 " 将有空格的字符串包含起来,自以为这样就不会被分割,实际结果就是狠狠的打脸,依然不行,究其原因就是:拼接的时候采用的 prinf 格式标准方式拼接,的确会对 " 包含的字符串特殊处理,但是当命令字符串再次传入 Redis API 中的时候就是一普通字符串了,依旧不行。

那还有其他方式么,当然有,将字符串转码,取出的时候再解码,但这种方式明显会恶心到自己,是万万不能接受的,所以我就决定花了一点时间去看了看 Redis 对应 API 的源码。

Redis 执行命令的 API 为 redisCommand。

仔细看了下源码发现,该 API 提供了和printf一样的标准格式化输入,也就是说,直接使用 redisCommand 是可以完美处理有空格的value,只是因为我们封装了一层就导致了格式化失效了,遇到空格就被分割了,最终导致命令语法错误。

redisCommand 的输入格式与 prinf 基本相同,甚至可以说是增强版的,下面一个个说明。

|数据长度|d i|u o x X|

|:--:|:-:|:-:|:-:|:

|none|int|unsigned int|

|hh|signed char|unsigned char|

|h|short int|unsigned short int|

|l|long int| unsigned long int|

|ll|long long int| unsigned long long int|

注意:上表表示不同的前缀表示的数据范围不同

输出为:

细心的各位一定注意到了,输入都为-161,但是只有一个原样输出了-161,并且那个是强制转换了成了 long 型才输出的。这个就涉及到了类型转换了。

基本原则如下:

最后一张图说明:

面对问题,想着回避,不去解决总结,总有一天又会再次遇见。自己偷懒挖的坑还得自己填。

redis 能不能根据 value 取 key

redis的值有5种类型,不同的类型有不同的命令来获取:字符直接getkey队列左端弹出一个元素LPOPkey哈希HGETkeyfield集合SMEMBERSkey返回集合中的所有元素有序集合ZRANGEkeystartstop更详细的命令可以查看redis常用命令。

文章排行