https://www.runoob.com/redis/redis-commands.html
Redis HyperLogLog是用来做基数统计的算法。
(1)优点:在输入元素的数量或者体积非常大时,计算基数所需的空间总是固定的、且是很小的。在Redis里,每个 Redis HyperLogLog键只需要花费12KB内存,就可以计算接近264个不同元素的基数。
缺点: Redis HyperLogLog只会根据输入元素来计算基数,而不会存储输入的元素本身。
比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
例:
redis 127.0.0.1:6379> PFADD runoobkey "redis" 1) (integer) 1 redis 127.0.0.1:6379> PFADD runoobkey "mongodb" 1) (integer) 1 redis 127.0.0.1:6379> PFADD runoobkey "mysql" 1) (integer) 1 redis 127.0.0.1:6379> PFCOUNT runoobkey (integer) 3
(1)PFADD key element [element...] 添加指定元素到HyperLogLog中。
(2)PFCOUNT key[key...] 返回给定HyperLogLog的基数估算值。
(3)PFMERGE destkey sourcekey[sourcekey...] 将多个HyperLogLog合并为一个HyperLogLog。
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
在Redis中,Redis客户端可以订阅任意数量的频道。
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
例:
# 订阅频道redisChat: redis 127.0.0.1:6379> SUBSCRIBE redisChat Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redisChat" 3) (integer) 1 # 现在,我们先重新开启个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。 redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique" (integer) 1 redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by runoob.com" (integer) 1 # 订阅者的客户端会显示如下消息 1) "message" 2) "redisChat" 3) "Redis is a great caching technique" 1) "message" 2) "redisChat" 3) "Learn redis by runoob.com"
(1)PSUBSCRIBE pattern[pattern...] 订阅一个或多个符合给定模式的频道。
(2)PUBSUB subcommand[argument [argument...]] 查看订阅与发布系统状态
(3)PUBLISH channel message 将信息发送到指定的频道
(4)PUNSUBSCRIBE [pattern [pattern...]] 退订所有给定模式的频道
(5)SUBSCRIBE channel[channel...] 订阅给定的一个或多个频道的信息
(6)UNSUBSCRIBE [channel [channel...]] 只退订给定的频道
Redis事务可以一次执行多个命令,并且带有以下三个重要的保证:
(1)批量操作在发送EXEC命令前被放入队列缓存。
(2)收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
(3)在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历三个阶段:
(1)开始事务
(2)命令入队
(3)执行事务
例:
# 先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令 redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED redis 127.0.0.1:6379> GET book-name QUEUED redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED redis 127.0.0.1:6379> SMEMBERS tag #返回集合中的所有成员 QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Mastering Series" 2) "C++" 3) "Programming"
单个Redis命令的执行时原子性的,但是Redis没有在事务上增加任何维持原子性的机制,所以Redis事务的执行并不是原子性的。
Redis 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
如:
redis 127.0.0.1:7000> multi OK redis 127.0.0.1:7000> set a aaa QUEUED redis 127.0.0.1:7000> set b bbb QUEUED redis 127.0.0.1:7000> set c ccc QUEUED redis 127.0.0.1:7000> exec 1) OK 2) OK 3) OK #如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。
(1)DISCARD 取消事务,放弃执行事务块内所有命令。
(2)EXEC 执行所有事务块内的命令。
(3)MULTI 标记一个事务块的开始。
(4)UNWATCH 取消WATCH命令对所有key的监视。
(5)WATCH key [key...] 监视一个或多个key,如果在事务执行之前这个key被其他命令所改动,那么事务将被打断。
Redis 脚本使用Lua解释器你来执行脚本。Redis2.6版本通过内嵌支持Lua环境。执行脚本的常用命令为EVAL。
语法:EVAL script numkeys key [key...] arg [arg...]
例:
redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second"
(1)EVAL script numkeys key [key ...] arg [arg ...] 执行 Lua 脚本。
(2)EVALSHA sha1 numkeys key [key ...] arg [arg ...] 执行 Lua 脚本。
(3)SCRIPT EXISTS script [script ...] 查看指定的脚本是否已经被保存在缓存当中
(4)SCRIPT FLUSH 从脚本缓存中移除所有脚本。
(5)SCRIPT KILL 杀死当前正在运行的 Lua 脚本。
(6)SCRIPT LOAD script 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本。
Redis连接命令主要是用于连接redis服务。
例:
redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG
(1)AUTH password 验证密码是否正确
(2)ECHO message 打印字符串
(3)PING 查看服务是否运行
(4)QUIT 关闭当前连接
(5)SELECT index 切换到指定的数据库
Redis服务器命令详见https://www.runoob.com/redis/redis-server.html
原文:https://www.cnblogs.com/willncy/p/12300507.html