linux:redis
查询: 链接
redis初了解
是一个 “开源、免费” 的高性能的 key - value 的数据库
安装
yum添加epel源
yum install epel-release
参考:链接
EPEL是什么?
EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.
1、使用:
首先需要安装一个叫” epel-release ”的软件包,这个软件包会自动配置yum的软件仓库。当然你也可以不安装这个包,自己配置软件仓库也是一样的。
#用于RHEL5系列
wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm rpm -ivh epel-release-5-4.noarch.rpm#用于RHEL6系列
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm rpm -ivh epel-release-6-5.noarch.rpm
yum安装redis
yum install redis
Redis 服务端配置
vim /etc/redis.conf
修改以守护进程方式启动:
找到redis.conf 并修改 daemonize no 为 daemonize yes
开启客户端要确保服务端启动
redis-server /etc/redis.conf
查看版本
redis-server -v /etc/redis.conf
打开终端
redis-cli
以上命令将打开以下终端:
redis 127.0.0.1:6379>
127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。
redis 127.0.0.1:6379> ping PONG
以上说明我们已经成功安装了redis。
设置redis开机自启动
chkconfig --add redis
chkconfig redis on 开启开机启动
chkconfig redis off 关闭开机启动
打开redis命令:service redis start
关闭redis命令:service redis stop
重启redis命令:service redis restart
配置
配置文件:/etc/redis.conf
可以通过 CONFIG 命令查看或设置配置项
CONFIG GET loglevel
使用 * 号获取所有配置项
CONFIG GET *
可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置
语法:
CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
数据类型
参考:链接
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
参考:链接
一个 key 对应一个 value
string 可以包含任何数据。比如jpg图片或者序列化的对象
string 类型的值最大能存储 512MB
以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 aaa,对应的值为 hello world!
Hash(哈希)
参考:链接
Redis hash 是一个键值 (key=>value) 对集合,是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
#删除aaa对象
del aaa
HMSET aaa s1 "hello" s2 "world" HGET aaa s1 HGET aaa s2
这里使用了 Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value。
每个 hash 可以存储 232 -1 键值对(40多亿)
List(列表)
参考:链接
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
Set(集合)
参考:链接
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
注意:以上实例中 c++添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。
这里用到了:
sadd :添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0
语法:
sadd key member
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是将Set中的元素增加一个权重参数score,元素按score有序排序
zset的成员是唯一的,但分数(score)却可以重复。
注意:这里用到了 zadd:添加元素到集合,元素在集合中存在则更新对应score
zrangebyscore : 获取分数范围内的值
语法:
zadd key score member
zrangebyscore key score1 score2
redis命令
Redis 命令用于在 redis 服务上执行操作,要在 redis 服务上执行命令需要一个 redis 客户端
先开启服务,
redis-server /etc/redis.conf
后启动客户端:
打开终端并输入命令 redis-cli :该命令会连接本地的 redis 服务
在远程服务上执行命令:
语法:
redis-cli -h host -p port -a password
若出现乱码:
redis-cli --raw
键(key)
Redis 键命令用于管理 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 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 客户端可以订阅任意数量的频道。
原理:
事务
参考:链接
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。【不具有原子性】
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。