Redis命令(2)

Redis HyperLogLog

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。

Redis HyperLogLog 是一种使用随机化用来做基数统计的算法,以少量内存提供集合中唯一元素数量的近似值。HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog 不能像集合那样,返回输入的各个元素。

HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值:

      基数:集合中不同元素的数量。比如 数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。

      估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内。

HyperLogLog命令:

1、PFADD key element [element2 ...] ----向HyperLogLog添加元素

    如果至少有一个元素被添加返回 1, 否则返回 0。

2、PFCOUNT key [key ...] -----返回给定 HyperLogLog 的基数估算值,如果多个 HyperLogLog 则返回基数估值之和。

3、PFMERGE  destKey  sourceKey [sourceKey....]-----将多个 HyperLogLog 合并为一个 HyperLogLog

     返回OK


Redis 发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 发布订阅(pub/sub)实现了消息系统,发送者(在redis术语中称为发布者)在接收者(订阅者)接收消息时发送消息。传送消息的链路称为信道。

在Redis中,客户端可以订阅任意数量的信道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

pubsub1

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

pubsub2

Redis发布订阅命令:

1、PSUBSCRIBE  pattern [pattern] ----订阅一个或多个频道匹配给指定的模式

    返回接收到的信息。

   下面列出了一些Redis的支持模式

  •  h?llo匹配了hello, hallo和hxllo

  •  h*llo 匹配了hllo和heeeello

  •  h[ae]llo 匹配了 hello 和 hallo, 但不是hillo

2、PUBSUB subcommand [argument[argument...]]----- 查看订阅与发布系统状态

    返回数组,活动的频道列表

3、PUBLISH channel message ----将信息发送到指定频道

    返回整数:接收到信息的订阅者数量。

4、PUNSUBSCRIBE [pattern [pattern...]] ----退订所有给定模式的频道。

   如果未指定任何模式,客户端是从所有先前认阅的模式退订。在这种情况下,对于每一个未预订模式的消息将被发送到客户端。

5、SUBSCRIBE  channel [channel ...] ----订阅给定的一个或多个频道信息

  返回接收到的信息。

6、UNSUNSCRIBE [channel [channel....] ---- 退订给定的频道信息,或者退订所有(如果没有给出)。

Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

Redis事务由命令 MULTI 启动,然后需要传递一个应该在事务中执行的命令列表,然后整个事务由EXEC命令执行。

Redis事物命令:

1、DISCARD-----用于取消事务,放弃执行事务块内的所有命令。

2、EXEC----执行事务块内的命令。

    返回事务块内所有命令的返回值,按命令执行的先后顺序排列。当操作被打断时,返回空值 nil 。

3、MULTI----标记一个事物开始

    事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

4、UNWATCH----取消watch命令对所有key的监视。

5、WATCH key[key....]-----监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

Redis脚本命令:

1、EVAL  script numerKeys key[key...] arg[arg...] ----执行Lua脚本   

参数说明:

  • script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。
  • numkeys: 用于指定键名参数的个数。
  • key [key ...]: 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
  • arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)
2、EVALSHA  sha1 numKeys key[key... ] arg [arg...] ---执行Lua脚本,根据给定的 sha1 校验码,执行缓存在服务器中的脚本。(类似EVAL)

3、SCRIPT EXISTS script[script....] ----查看指定的脚本是否已经保存在缓存中。

    返回值,一个列表,包含 0 和 1 ,前者表示脚本不存在于缓存,后者表示脚本已经在缓存里面了。

    列表中的元素和给定的 SHA1 校验和保持对应关系,比如列表的第三个元素的值就表示第三个 SHA1 校验和所指定的脚本在缓存中的状态。

    这个命令接受一个或多个SHA1摘要,如果脚本已经定义返回1或者没有脚本缓存中的信号则返回0。

4、SCRIPT FLUSH----从脚本缓存中移除所有脚本

5、SCRIPT KILL ---杀死当前正在运行的脚本。仅在这个脚本没有执行过任何写操作时,这个命令才生效。

      这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。

     SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。

     如果脚本已经执行的写操作用这种方法不能被杀死,因为它违反Lua脚本原子协议。在这种情况下,只有停机NOSAVE能够杀死脚本。

6、SCRIPT LOAD script----将script添加到脚本缓存中,但不立即执行脚本。

       EVAL 命令也会将脚本添加到脚本缓存中,但是它会立即对输入的脚本进行求值。

       如果给定的脚本已经在缓存里面了,那么不执行任何操作。

       在脚本被加入到缓存之后,通过 EVAL FLUSH 命令,可以使用脚本的 SHA1 校验和来调用这个脚本。

       脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。

     返回给定脚本的 SHA1 校验和

Redis 连接

Redis 连接命令主要是用于连接 redis 服务。

Redis连接命令:

1、AUTH password ----验证密码是否正确

2、ECHO message ----打印字符串

    返回字符串本事(message)

3、PING -----查看服务是否运行

     如果服务器运作正常的话,会返回一个 PONG,否则返回一个连接错误 。通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。

4、QUIT----关闭当前连接

5、SELECT index----切换到指定数据库

     数据库索引号 index 用数字值指定,以 0 作为起始索引值。

redis 127.0.0.1:6379> SELECT 1
redis 127.0.0.1:6379[1]> 

redis 127.0.0.1:6379[1]> SELECT 3    
redis 127.0.0.1:6379[3]> 













你可能感兴趣的:(NOSQL数据库)