本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Redis 的键命令、HyperLogLog 命令、脚本命令、连接命令、服务器命令
吴振华 · 356浏览 · 发布于2020-03-26 +关注

Redis 的键命令

Redis 的键命令主要用于管理 Redis 的键,如删除键、查询键、修改键及设置某个键等。

1. EXISTS 命令:判断键是否存在

2. KEYS 命令:查找键

KEYS 命令用于按照指定的模式(pattern)查找所有的 key。参数 pattern 类似于正则表达式。

● KEYS*:表示匹配查找数据库中的所有 key。

● KEYS r?dis:表示匹配 radis、redis、rxdis 等。

● KEYS r*dis:表示匹配 rdis、redis、reeedis 等。

● KEYS r[ae]dis:表示匹配 radis 和 redis,但是不会匹配 ridis。

遇到特殊符号需要使用「\」隔开(转义)。

3. OBJECT 命令:查看键的对象

OBJECT 命令用于从内部查看给定 key 的 Redis 对象。该命令通常用在除错或者为了节省空间而对 key 使用特殊编码的情况下。如果要用 Redis 来实现与缓存相关的功能,则可以使用 OBJECT 命令来决定是否清除 key。

OBJECT 命令有如下子命令:

● OBJECT REFCOUNT key 用于返回给定 key 引用所存储的值的次数,多用于除错。

● OBJECT ENCODING key 用于返回给定 key 所存储的值所使用的底层数据结构。

● OBJECT IDLETIME key 用于返回给定 key 自存储以来的空闲时间,以秒为单位。

Redis 对象具有多种编码格式。

● 针对字符串可以被编码为 raw(一个字符串)或 int(Redis 会将字符串表示的 64 位有符号整数编码为整数来存储,以此来节约内存)。

● 针对列表可以被编码为 ziplist 或 linkedlist。ziplist 是压缩列表,用来表示占用空间较小的列表。

● 针对集合可以被编码为 intset 或 hashtable。intset 是只存储数字的小集合的特殊表示。

● 针对哈希表可以被编码为 zipmap 或 hashtable。zipmap 是小哈希表的特殊表示。

● 针对有序集合可以被编码为 ziplist 或 skiplist。ziplist 主要用于表示小的有序集合;而 skiplist 可以表示任意大小的有序集合。

返回值:OBJECT 命令的子命令 REFCOUNT 和 IDLETIME 会返回数字,而 ENCODING 会返回相对应的编码类型。

4. RANDOMKEY 命令:随机返回一个键

127.0.0.1:6379> exists student:name(integer) 1
127.0.0.1:6379> keys *
1) "bookorder"
2) "book"
3) "student:id"4) "str1"
5) "student:age"6) "video:10010"7) "student:name"8) "student:home"127.0.0.1:6379> object encoding video:10010"raw"

5. RENAME 命令:修改键的名称(如果 newkey 已经存在,则 RENAME 命令执行后将会覆盖旧值。)

6. RENAMENX 命令:修改键的名称 (当且仅当 newkey 不存在时才能修改)

127.0.0.1:6379> rename str1 strOK

7. DUMP 命令:序列化键

8.RESTORE 命令:对序列化值进行反序列化

使用 DUMP 命令序列化生成的值具有以下特点:

● 这个值具有 64 位的校验和,用于检测错误。RESTORE 命令在进行反序列化之前,会先检查校验和。

● 这个值的编码格式和 RDB 文件的编码格式保持一致。

● RDB 版本会被编码在序列化值中。如果 Redis 的版本不同,那么这个 RDB 文件会存在不兼容,Redis 也就无法对这个值进行反序列化。

● 这个序列化的值中没有生存时间信息。

127.0.0.1:6379> dump str"\x00\xc0{\x06\x00\xde\x0f;a\xf5/[*"

9. PTTL 命令:获取键的生存时间(毫秒)

10. TTL 命令:获取键的生存时间(秒)

11. EXPIRE 命令:设置键的生存时间(秒)

12. PEXPIRE 命令:设置键的生存时间(毫秒)

13. EXPIREAT 命令:设置键的生存 UNIX 时间戳(秒)

14. PEXPIREAT:设置键的生存 UNIX 时间戳(毫秒)

127.0.0.1:6379> expire str 10
(integer) 1
127.0.0.1:6379> ttl str(integer) 5

15. MIGRATE 命令:转移键值对到远程目标数据库

migrate host port key destination-db timeout [copy] [replace]

MIGRATE 命令是原子操作,它在执行的时候会阻塞进行转移的两个数据库,直到转移成功,或转移失败,又或者出现等待超时。

MIGRATE 命令的实现原理为:在当前数据库(源数据库)中,对给定的 key 执行 DUMP 命令,将它序列化后,转移到目标数据库中,目标数据库再使用 RESTORE 命令对数据进行反序列化,将反序列化后的结果保存到数据库中;源数据库就好像目标数据库的客户端一样,只要遇到 RESTORE 命令返回 OK,就会调用 DEL 命令删除自己数据库中的 key。

● 参数 timeout:用于设置当前数据库与目标数据库进行转移时的最大时间间隔,单位为毫秒。当转移的时间超过了 timeout 时,就会报请求超时。

MIGRATE 命令需要在 timeout 时间范围内完成 I/O 操作。如果在转移数据的过程中发生了 I/O 操作,或者达到了超时时间,那么该命令将会终止执行,并返回一个特殊的错误:IOERR。出现 IOERR 错误有两种情况:

➢ 源数据库和目标数据库中可能同时存在这个 key。

➢ key 也可能只在源数据库中存在。

此时读者可能会问:会不会存在 key 丢失的情况?答案是:key 丢失的情况是不可能发生的。如果 MIGRATE 命令在执行的过程中出现了其他错误,那么该命令可以保证这个 key 只存在于源数据库中。

● 参数 COPY:如果在 MIGRATE 命令中设置了 COPY 参数,则表示在转移之后不会删除源数据库中的 key。

● 参数 REPLACE:如果在 MIGRATE 命令中设置了 REPLACE 参数,则表示在转移过程中会替换目标数据库中已经存在的 key。

16. MOVE 命令:转移键值对到本地目标数据库

127.0.0.1:6379> move student:name 1
(integer) 1
127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> keys *
1) "student:name"

17. SORT 命令:对键值对进行排序

排序默认以数字作为对象,值会被解释为 double 类型的浮点数,然后进行比较。

18. TYPE 命令:获取键对应值的类型

127.0.0.1:6379[1]> type student:namestring

19. DEL 命令:删除键

127.0.0.1:6379[1]> del student:name(integer) 1

20. PERSIST 命令:删除键的生存时间

HyperLogLog 命令

基数:举一个例子,有数据集{1,3,5,8,5,8,9},去掉重复数据之后,得到这个数据集的基数集为{1,3,5,8,9},这个基数集的基数就是 5。

基数的特点:基数不可重复,且基数估计在误差允许的范围内。

HyperLogLog 是 Redis 用来做基数统计的算法。当 Redis 数据库中的数据量非常庞大时,使用 HyperLogLog 命令来计算相关基数时,它具有所需空间固定、所占空间小的优点。在 Redis 中,每个 HyperLogLog 键只需要耗费 12KB 的内存,就可以计算接近 2^64 个不同元素的基数。HyperLogLog 不会存储输入的元素,它仅仅根据输入的元素来计算基数,因此它不会返回输入的元素。

使用HyperLogLog可以统计网站每天的uv数据

1.PFADD 命令:向 HyperLogLog 中添加键值对。
127.0.0.1:6379> pfadd age-log 18 19 20 12 19 18
(integer) 1
2.PFCOUNT 命令:获取 HyperLogLog 的基数。
127.0.0.1:6379> pfcount age-log(integer) 4

当给定的 key 有多个时,PFCOUNT 命令返回给定 HyperLogLog 的并集的近似基数,这个近似基数是通过将所有给定的 HyperLogLog 合并到一个临时的 HyperLogLog 中计算出来的。

3.PFMERGE 命令:合并多个 HyperLogLog 为一个新的 HyperLogLog。

脚本命令

Redis 脚本使用 Lua 解释器来执行。使用 Redis 脚本可以一次性将多个请求命令发送出去,以减少网络的开销;使用 Redis 脚本实现原子操作,Redis 会将整个脚本作为一个整体执行,中间不会有其他命令被执行,以此来保证原子性;使用 Redis 脚本可以达到复用的目的,因为 Redis 会永久保存客户端发送的脚本,所以其他客户端可以直接复用这个脚本。

Redis 脚本命令用于操作 Redis 脚本。

1.SCRIPT LOAD 命令:添加 Lua 脚本到缓存中

SCRIPT LOAD 命令用于将脚本 script 添加到脚本缓存中,但是并不会立即执行这个脚本。该命令与 EVAL 命令相似,但是 EVAL 命令在将脚本添加到缓存中后,会立即对输入的脚本进行求值操作。如果给定的脚本已经在缓存中存在,那么这个命令什么也不做。脚本被加入缓存中以后,可以通过 EVALSHA 命令使用脚本的 SHA1 校验和来调用这个脚本。

Lua 脚本可以在 Redis 的缓存中长时间保存,直到遇到 SCRIPT FLUSH 命令为止。

2.SCRIPT EXISTS 命令:判断脚本是否已在缓存中

3.EVAL 命令:对 Lua 脚本求值

eval script numkeys key [key ...] arg [arg ...]

● 参数 script 是一段 Lua 脚本程序,它运行在 Redis 的服务器中。

● 参数 numkeys 用于指定键名参数的个数。

● 键名参数 key [key...]从 EVAL 命令的第三个参数开始算起,表示脚本中所用到的那些 Redis 键(key)。在 Lua 脚本中,可以使用全局变量 KEYS 数组(下标从 1 开始)

来访问这些键名参数。

● 参数 arg [arg...]是附加参数。在 Lua 脚本中,可以使用 ARGV 数组(下标从 1 开始)来访问这些附加参数。

4. EVALSHA 命令:对缓存中的脚本求值(参数及用法同上)

5. SCRIPT KILL 命令:杀死正在运行的 Lua 脚本

针对一个正在运行且没有执行过任何写操作的 Lua 脚本,可以使用 SCRIPT KILL 命令来杀死它。SCRIPT KILL 命令主要用于终止运行时间过长的脚本。该命令执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误的返回值。

如果这个正在运行的脚本执行过写操作,那么使用 SCRIPT KILL 命令是无法杀死它的。Lua 脚本是原子性执行的。如果你非要杀死这个运行中的 Lua 脚本,则可以使用 SHUTDOWN NOSAVE 命令来直接关闭整个 Redis 进程,进而停止这个脚本的运行,并防止不完整的数据写入数据库中。

6. SCRIPT FLUSH 命令:清除缓存中的 所有Lua 脚本

连接命令

Redis 连接命令主要用于连接 Redis 的服务,如查看服务状态、切换数据库等

1. AUTH 命令:用于解锁密码。
2. QUIT 命令:断开客户端与服务器的连接。
3. PING 命令:查看服务器的运行状态。
127.0.0.1:6379> pingPONG
4. ECHO 命令:输出打印消息。
5.SELECT 命令:切换数据库。
127.0.0.1:6379> select 1OK

服务器命令

Redis 服务器命令主要用于操作管理 Redis 服务,比如,管理 Redis 的日志,保存数据,修改相关配置等。

1.CLIENT LIST 命令:获取客户端相关信息
127.0.0.1:6379[1]> client list
id=9 addr=127.0.0.1:52421 fd=10 name= age=457 idle=0 flags=N db=1 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

返回的域含义如下。

● id:表示客户端编号。

● addr:表示客户端的地址(IP 地址 + 端口)。

● fd:表示套接字所使用的文件描述符。

● age:表示已连接时长,单位为秒。

● idle:表示连接空闲时长,单位为秒。

● flags:表示客户端 flag(见下文)。

● db:指明该客户端正在使用的数据库,数值表示数据库的索引号。

● sub:表示已订阅的消息频道数量。

● psub:表示已订阅模式的数量。

● multi:表示在事务中被执行的命令数量。

● qbuf:表示查询缓冲区的长度,0 表示没

相关推荐

Protobuf协议应用干货

奔跑的男人 · 1082浏览 · 2019-06-03 11:03:30
谈谈Java任务的并行处理

吴振华 · 1020浏览 · 2019-06-03 11:11:27
Dubbo Adaptive机制详解

吴振华 · 961浏览 · 2019-06-06 11:12:41
Dubbo配置属性初始化详解

· 836浏览 · 2019-06-11 11:34:07
RPC的负载均衡策略

qq2360248666 · 768浏览 · 2019-06-12 14:27:20
加载中

0评论

评论
坐标是江苏.南京,行业是互联网,技术是PHP和java,还有熟悉前后端等。
分类专栏
小鸟云服务器
扫码进入手机网页