一, 概念
Redis 是一种支持 Key-Value 等多种数据结构的存储系统. 可用于缓存, 事件发布或订阅, 高速队列等场景. 该数据库使用 ANSI C 语言编写, 支持网络, 提供字符串, 哈希, 列表, 队列, 集合结构直接存取, 基于内存, 可持久化.
二, Redis 的应用场景有哪些
1, 会话缓存 (最常用)
2, 消息队列, 比如支付
3, 活动排行榜或计数
4, 发布, 订阅消息 (消息通知)
5, 商品列表, 评论列表等
1.Redis 安装:
- # wget http://download.redis.io/releases/redis-4.0.6.tar.gz
- # yum install gcc
- # make MALLOC=libc
- # cd src && make install
- # ./Redis-server
2. 修改配置文件: VIM ../Redis.conf
- daemonize yes #以后台进程方式启动
- #bind 127.0.0.1 #允许本地连接
- requirepass RedHat #设置连接密码
3. 后台启动:./Redis-server /root/Redis-4.0.6/Redis.conf
4. 登录: Redis-cli -h 127.0.0.1 -p 6379
认证: auth RedHat
5.Redis 数据类型:
字符串 (string):set bp 123 #设置字符串类型 bp 值为 122
- get bp #获取 bp 的值
- type bp # 获取 bp 的类型
- append bp Linux # 向 bp 插入字符 Linux
- strlen bp #获取字符串长度
- del bp # 删除键值
mset 键 1 值 1 键 2 值 2 ... # 设置多个键值
mget 键 1 键 2 键 3 .... # 获取多个键值
散列 (hash):hset ID(散列名) name(键) passwd(值) #设置散列名 ID 存放的值对
- hget ID name #获取散列名 ID 的 name 对应的值
- hgetall ID # 获取散列 ID 的全部值
- hmset age name Linux kali contos debian 30 #一次性设置散列 age 的值
- hdel ood name # 删除某个散列的值
- hexists age kali # 判断某个散列的值是否存在, 0 不存在
列表 (list):lpush test 1 #列表名为 test, 从左边加入 1, 编号为最后一位数
- rpush test -1 #列表名为 test, 从右边加入 - 1, 编号为 0
- llen test #列表长度
- lpop test #左边出去一个数
- rpop test #右边出去一个数
- lrange test 2 3 #列表下标从 0 开始计算, 显示第三个数和第四个数
- lrem test 1 3 #左数删除 1 个 3
- lindex test 2 #获取 2 的下标
- ltrim test 0 2 #test 取截取 (删除) 出来的下标 0 到 2 对应的值
集合 (set):sadd Linux a b c d e a b # 增加 Linux 集合, 集合内容为 a b c d e , 不能出现相同数据
- srem Linux d e #删除 Linux 集合中的 d e 元素
- smembers Linux #查看 Linux 的元素
- sismember Linux d #查看 d 是否是集合 Linux 的元素, 否
- sdiff Linux CentOS #两个集合取差集,(顺序不同, 结果不同)
- sinter Linux CentOS #取交集
- sunion Linux CentOS #取并集
有序集合 (zset):zadd test1 10(值) a(键) #增加 test1 有序集合, 分数为 10 等级为 a
- zrem test1 b #移除 test1 的等级 b 的值
- zscore test1 a #查看 test1 的等级 a 的值
- zrange test1 0 1 #查看 test1 第一个和第二个的值
- zrangebyscore test1 5 10 #根据分数查看对应的的等级
三, Redis 持久化
1.RDB 持久化
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照, 将 Redis 内存中的数据, 完整的生成一个快照, 以二进制格式文件 (后缀 RDB) 保存在硬盘当中. 当需要进行恢复时, 再从硬盘加载到内存中. RDB 可以最大化 Redis 的性能: 父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程, 然后这个子进程就会处理接下来的所有保存工作, 父进程无须执行任何磁盘 I/O 操作. RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快. 但是一旦发生故障, 可能会丢失几分钟的数据.
触发:
1. 配置文件:#VIM Redis.conf
- save 900 1 // 900 内, 有 1 条写入, 则产生快照
- save 300 1000 // 如果 300 秒内有 1000 次写入, 则产生快照
- save 60 10000 // 如果 60 秒内有 10000 次写入, 则产生快照
- stop-writes-on-bgsave-error yes // 后台备份进程出错时, 主进程停不停止写入? 主进程不停止 容易造成数据不一致
- rdbcompression yes // 导出的 rdb 文件是否压缩, 如果 rdb 的大小很大的话建议这么做
- Rdbchecksum yes // 导入 rbd 恢复时数据时, 要不要检验 rdb 的完整性 验证版本是不是一致
- dbfilename dump.rdb // 导出来的 rdb 文件名
- dir ./ //rdb 的放置路径
2. 手动: save(同步)
bgsave(异步)
2.AOF 持久化
AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, AOF 文件是一个只进行追加操作的日志文件
触发:#VIM Redis.conf
- appendonly no // 是否打开 aof 日志功能, aof 跟 rdb 都打开的情况下
- appendfsync always // 每 1 个命令, 都立即同步到 aof. 安全, 速度慢
- appendfsync everysec // 折衷方案, 每秒写 1 次
- appendfsync no // 写入工作交给操作系统, 由操作系统判断缓冲区大小, 统一写入到 aof. 同步频率低, 速度快,
- no-appendfsync-on-rewrite yes: // 正在导出 rdb 快照的过程中, 要不要停止同步 aof
- auto-aof-rewrite-percentage 100 //aof 文件大小比起上次重写时的大小, 增长率 100% 时, 重写缺点刚开始的时候重复重写多次
- auto-aof-rewrite-min-size 64mb //aof 文件, 至少超过 64M 时, 重写
3. 测试使用 Redis-benchmark -n 10000 :: 表示 执行请求 10000 次
四, 单节点集群
1. 创建集群目录:# mkdir /usr/local/Redis-cluster
#wget http://download.redis.io/releases/redis-3.0.6.tar.gz
2. 解压 6 次到该目录:# tar zxvf Redis-3.0.6.tar.gz -C /usr/local/Redis-cluster
3. 编译安装:# make MALLOC=libc
# cd src && make install
4. 修改绑定 IP:# sed -i 's/bind 127.0.0.1/bind 192.168.11.199/g' Redis.conf
5. 修改端口号 7001-7006:# sed -i 's/port 6379/port 7001/g' Redis-1/Redis.conf
6. 开启后台启动模式:# sed -i 's/daemonize no/daemonize yes/g' Redis.conf
7. 复制 Redis 配置文件重命名为 Redis-2...6.conf, 修改端口号 7002-7006
8.. 安装 Ruby 环境:# yum -y install Ruby
# yum -y install RubyGems
9. 安装执行 Ruby 脚本 Redis-trib.rb 执行所依赖的 Gem 包:# wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
# Gem install -l ./Redis-3.2.1.Gem
10. 编写脚本启动所有实例
- #!/bin/bash
- set -e
- redis1=/usr/local/Redis-cluster/Redis-4.0.6/Redis-1.conf
- redis2=/usr/local/Redis-cluster/Redis-4.0.6/Redis-2.conf
- redis3=/usr/local/Redis-cluster/Redis-4.0.6/Redis-3.conf
- redis4=/usr/local/Redis-cluster/Redis-4.0.6/Redis-4.conf
- redis5=/usr/local/Redis-cluster/Redis-4.0.6/Redis-5.conf
- redis6=/usr/local/Redis-cluster/Redis-4.0.6/Redis-6.conf
- echo "start redis-1..."
- {
- /usr/local/bin/Redis-server $redis1>/dev/null 2>&1
- } || {
- echo "start error"
- exit 1
- }
- echo "start redis-2..."
- {
- /usr/local/bin/Redis-server $redis2>/dev/null 2>&1
- } || {
- echo "start error"
- exit 1
- }
- echo "start redis-3..."
- {
- /usr/local/bin/Redis-server $redis3>/dev/null 2>&1
- } || {
- echo "start error"
- exit 1
- }
- echo "start redis-4..."
- {
- /usr/local/bin/Redis-server $redis4>/dev/null 2>&1
- } || {
- echo "start error"
- exit 1
- }
- echo "start redis-5..."
- {
- /usr/local/bin/Redis-server $redis5>/dev/null 2>&1
- } || {
- echo "start error"
- exit 1
- }
- echo "start redis-6..."
- {
- /usr/local/bin/Redis-server $redis6>/dev/null 2>&1
- } || {
- echo "start error"
- exit 1
- }
10. 启动
11. 复制集群脚本命令
# cp src/Redis-trib.rb .
12. 开启每个配置文件的集群功能
# sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' Redis-2.conf
13. 创建集群
- # cd src
- # ./Redis-trib.rb create --replicas 1 192.168.11.199:7001 192.168.11.199:7002 192.168.11.199:7003 192.168.11.199:7004 192.168.11.199:7005 192.168.11.199:7006
14. 连接集群, 自动切换集群节点
# Redis-cli -h 192.168.11.199 -p 7001 -c
15. 检查集群状态
# ./Redis-trib.rb check 192.168.11.199:7001
来源: http://www.bubuko.com/infodetail-2846642.html