Posts /

Redis学习(二)

18 Jul 2020

Redis学习(二)


实战(一)

参考

Redis 教程

命令

详细命令请参考 Redis 命令

数据类型:String、hash、list、set、sorted set。

String

GET 获取键的值

SET 设置键的值

DEL 删除键的值 (可用于所有类型)

Hash

需要有一个filed参数(相当于key?)

HSET 关联起给定键值对

HGET 获取散列键的值

HGETALL 获取所有键值对

List

RPUSH 将值推入列表右端 rpush list item

LRANGE 获取给定范围的所有值 lrange list 0 -1 (-1代表列表结束)

LINDEX 给定指定位置上的单个元素

LPOP 左端弹出一个值,并返回弹出的值

Set

SADD : 添加元素

SMEMBERS 返回所有元素

SISMEMBER 检查元素是否在集合中

SREM 如果元素在集合中,那么移除元素

Sorted Set

需要有一个分值参数

ZADD

ZRANGE

ZRANGEBYSCORE 获取有序集合在给定分值范围内的所有元素

ZREM

Redis HyperLogLog

Redis HyperLogLog

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

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

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

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

命令

PFADD key element [element ...] 添加指定元素到HyperLogLog中

PFCOUNT key [key ...] 返回给定HyperLogLog的基数估计值

PFMERGE destkey sourcekey [sourcekey ...] 将多个 HyperLogLog 合并为一个 HyperLogLog

发布订阅

redis 127.0.0.1:6379> SUBSCRIBE redisChat #订阅redisChat消息

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
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"

Redis事务

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

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

#以 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"

事务是打包的批量脚本,但批量指令并非原子化操作,中间某条指令的失败不会导致前面已做指令回滚,也不会导致后面指令不执行。

It’s important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

Redis 脚本

执行脚本的常用命令为 EVAL

redis 127.0.0.1:6379> 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"

总结:

Redis数据结构

Redis五种数据结构

String是最基本的数据类型,K-V的结构

五种数据结构:String、Hash表、Linked List、Set、Sorted Set