Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
数据类型
Redis键(key)命令用于管理redis的键
字符串数据类型(String)的相关命令用于管理redis字符串的值
— > command key_name
Redis hash是一个string类型的field和value的映射表,hash适合用于存储对象
— > command hash_name field_name value
列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部或者尾部
—> command lsit_name value
Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd命令:sadd key member
有序集合(sorted set)
Redis有序集合和集合一样也是String类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
zadd命令:zadd key score member
Redis HyperLogLog
Redis 在 2.8.9 版本添加了 HyperLogLog 结构。
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
· 基数:比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。
Redis HyperLogLog 命令
命令 | 描述 |
---|---|
PFADD key element[element…] | 添加指定元素到HyperLogLog中 |
PFCOUNT key[key] | 返回给定的HyperLogLog的基数估算值 |
PFMERGE destkey sourcekey[sourcekey…] | 将多个HyperLogLog合并为一个HyperLogLog |
Redis发布订阅
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
实例:
创建订阅频道:redisChat
—> SUBSCRIBE redisChat
其他redis客户端在同一频道发布消息:
—> PUBLISH redisChat "xxx"
订阅符合给定模式的频道
—> PSUBSCRIBE pattern[pattern...]
则订阅者的客户端会显示如下消息:
1) "message"
2) "redisChat"
3) "xxx"
Redis事务
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
· 批量操作在发送 EXEC 命令前被放入队列缓存。
· 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
· 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
· 开始事务。
· 命令入队。
· 执行事务
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
Redis事务命令
命令 | 描述 |
---|---|
DISCARD | 取消事务,放弃执行事务块内的所有命令 |
EXEC | 执行所有事务块内的命令 |
MULTI | 标记一个事务块的开始 |
UNWATCH | 取消WATCH命令对所有key的监视 |
WATCH key [key…] | 监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断 |
Redis脚本
Redis脚本使用Lua解释器来执行脚本。Redis2.6版本通过内嵌支持Lua环境。
执行脚本的常用命令为EVAL。
语法:
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"
Redis连接
Redis连接命令主要用于连接redis服务。
实例:
客户端如何通过密码验证连接到redis服务,并检测服务是否运行:
—> AUTH "password"
Redis服务器
Redis服务器命令主要是用于管理redis服务器的统计信息。
Redis数据备份与恢复
Redis SAVE 命令用于创建当前数据库的备份
—> SAVE
恢复数据:如果要恢复数据,只需要将备份文件(dump.rdb)移动到redis安装目录并启动服务器即可。获取redis目录可以用CONFIG命令
创建redis备份文件也可以使用BGSAVE,该命令在后台执行。
—> BGSAVE