实战(一)
参考
命令
详细命令请参考 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 在 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
发布订阅
1 | redis 127.0.0.1:6379> SUBSCRIBE redisChat #订阅redisChat消息 |
1 | redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique" |
Redis事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
1 | #以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令: |
事务是打包的批量脚本,但批量指令并非原子化操作,中间某条指令的失败不会导致前面已做指令回滚,也不会导致后面指令不执行。
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
1 | redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...] |
1 | redis 127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second |