作者:蛋狗酱_972 | 来源:互联网 | 2023-08-17 14:31
1. redis的概述 Redis(Remote Dictionary Server,远程字典服务)是一种非关系型(NoSQL )数据库 ,它是一个开源的使用 c语言 编写的key-value 存储系统(区别于MySQL的二维表格的形式存储)
Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化
redis官网地址:
https://redis.io/
中文网站 http://www.redis.cn/
redis具有如下特点:
高读写性:Redis读取的速度是110000次/s,写的速度是81000次/s 原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行 支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合) 稳定性:主从结构 支持事务 支持过期时间 支持消息订阅 2. 配置redis 2.1 下载redis安装包并解压 cd /export/softwareswget http://download.redis.io/releases/redis-3.2.8.tar.gzcd /export/softwarestar -zxvf redis-3.2.8.tar.gz -C .. /servers/
2.2 安装C程序运行环境 yum -y install gcc-c++
2.3 安装tcl Tcl(tool command language)是一种简单的脚本语言,主要使用于发布命令给一 些互交程序如文本编辑器、调试器和shell。它有一个简单的语法 和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。
其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的 过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用
yum -y install tcl
2.4 编辑redis make MALLOC= libc 或 make make test 或者 make install
2.5 修改配置文件 先要创建logs和redisdata文件夹
cd /export/servers/redis-3.2.8/mkdir -p /export/servers/redis-3.2.8/logsmkdir -p /export/servers/redis-3.2.8/redisdata vim redis.conf
需要修改这些地方
bind hadoop1 daemonize yes pidfile /var/run/redis_6379.pid logfile "/export/servers/redis-3.2.8/logs/redis.log" dir /export/servers/redis-3.2.8/redisdata
2.5.1 实现主从复制架构 slaveof hadoop1 6379
2.4.2 实现哨兵(Sentinel)架构 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
具体机制如下图所示:
修改sentinel.conf
文件
bind hadoop1 daemonize yes sentinel monitor mymaster hadoop1 6379 2
2.6 启动redis cd /export/servers/redis-3.2.8/ src/redis-server redis.conf
redis启动没有任何提醒,可以用ps -ef | grep redis
查看是否启动
2.7 连接redis src/redis-cli -h hadoop1
3. redis的持久化 redis的持久化也就是将数据从内存上保存到磁盘中,redis中的持久化分为RDB 和AOF 两种方式
3.1 RDB持久化方式 Redis默认开启RDB快照,会定期保存数据到一个rbd文件中,也可以通过sava或bgsave(推荐)手动的触发RDB快照保存
SAVE 直接调用 rdbSave ,阻塞 Redis 主进程 ,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
BGSAVE 则 fork 出一个子进程 ,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。 Redis 服务器在BGSAVE 执行期间仍然可以继续处理客户端的请求 。
RDB方案优点 对性能影响最小。Redis在保存RDB快照时会fork出子进程进行,几乎不影响Redis处理客户端请求的效率。
每次快照会生成一个完整的数据快照文件,所以可以辅以其他手段保存多个时间点的快照(例如把每天0点的快照备份至其他存储媒介中),作为非常可靠的灾难恢复手段。
使用RDB文件进行数据恢复比使用AOF要快很多
RDB方案缺点 快照是定期生成的,所以在Redis crash时或多或少会丢失一部分数据。
如果数据集非常大且CPU不够强(比如单核CPU),Redis在fork子进程时可能会消耗相对较长的时间,影响Redis对外提供服务的能力。
redis中的原始配置如下图所示,可以自行进行修改
修改配置后需要重启redis服务
ps -ef | grep rediscd /export/servers/redis-3.2.8/ src/redis-server redis.conf
3.2 AOF持久化方式 采用AOF持久方式时,Redis会把每一个写请求都记录在一个日志文件里。在Redis重启时,会把AOF文件中记录的所有写操作顺序执行一遍,确保数据恢复到最新。
AOF有三种fsync配置:always/everysec/no
always:每写入一条日志就进行一次fsync操作,数据安全性最高 everysec:每秒进行一次fsync no:不进行fsync操作,让os自动进行flush AOF优点: 最安全,在启用appendfsync always时,任何已写入的数据都不会丢失,使用在启用appendfsync everysec也至多只会丢失1秒的数据
AOF文件在发生断电等问题时也不会损坏,即使出现了某条日志只写入了一半的情况,也可以使用redis-check-aof工具轻松修复。
AOF文件易读,可修改,在进行了某些错误的数据清除操作后,只要AOF文件没有rewrite,就可以把AOF文件备份出来,把错误的命令删除,然后恢复数据。
AOF的缺点: AOF文件通常比RDB文件更大
性能消耗比RDB高
数据恢复速度比RDB慢
在redis中AOF默认是关闭的,设置图下图所示,可以进行更改
为了防止AOF文件过大,使得恢复时间过长,redis提供AOF rewrite功能,可以重写AOF文件,只保留能够把数据恢复到最新状态的最小写操作集。
AOF rewrite可以通过BGREWRITEAOF命令触发,也可以配置Redis定期自动进行