Redis(Remote Dictionary Server)基础
redis:非关系型数据库,内存存储,持久化,键值对存储,监听端口号6379/tcp,默认监听127.0.0.1地址(只能本地访问)
1.noSQL数据库类型
文档型数据库:MongoDB等
列族数据库:HBase,Cassandra等
图形数据库:Neo4j,ArangoDB等
键值对数据库:Redis,Memcached等
对象数据库:db4o等
2.redis应用场景:
高速缓存(它可以缓存各种类型的数据,如数据库查询结果、API返回结果等,以提高应用程序的响应速度和并发性能)
分布式锁(Redis的分布式锁可以确保在分布式系统中对某个资源的互斥访问,避免多个节点出现并发操作的问题)
计数器(能够方便地实现各种计数器的功能,如网站访问次数计数、订单数量计数等), 会话管理(实现会话的状态存储和共享,避免了单点故障的问题)
消息队列(实现异步消息处理和任务派发等功能。)
3.数据类型:字符串,哈希值,集合,列表,位图
4.redis安装
编译安装
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
yum安装
Yum -y install epel-release
Yum -y install redis
5.启动:systemctl start redis
5.查看生成了什么文件: rpm -ql redis
启动脚本: /usr/lib/systemd/system/redis.service
6.配置文件:/etc/redis.conf #不建议单台主机运行多个redis,在修改配置文件之前,一定要先关闭redis
bind 127.0.0.1 #修改监听地址(注:更改redis监听地址/端口号之前一定要关掉redis,更改后再重启)
port 6379 #修改监听端口号
pidfile #指定通过该配置文件启动
Reids #进程后的PID文件名称
Loglevel #定义日志级别
Logfile #定义日志存储路径
Databases 16 #指定默认数据库数量
Save #定义单位时间内key的改变次数
Dbfilename #定义存储RDB持久化数据的文件名称
Dir #定义RDB与AOF文件的存储目录
Appendonly #AOF的启停
Appendfilename #定义AOF持久化文件的名称
Appendfsync #定义AOF数据同步间隔
requirepass #设置登录redis的密码
Maxmemory #内存限制
7.redis启动命令:redis-server
redis登录命令:redis-cli
选项: -h 指定redis服务器IP
-p 指定访问端口号
-a 指定登录密码
-n 指定数据库编号
8.帮助信息:help 命令字
例:help set
tab补齐
9.数据操作
- Set 设置键值对
例:Set key value
- Keys 键
例:keys * #查看所有键的名称
Keys 键名称 #查看一个键是否存在
- Get 取出键值对
例:get 键 #键不存在则返回空
- Del 删除键值对
- FLUSHALL 清空所有数据库中的数据
- Rename 重命名键名称(不论更名后的键是否存在都会覆盖原有键,并将改名前的键的值赋予改名后的键)
例:rename oldkey newkey
- Renamenx 重命名键名称(若改名后键名称存在则改名不成功)
例:renamenx oldkey newkey
- Move 移动键值对到指定数据库(若目标数据库中存在同名键则移动失败)
例:move key dbnum
- Ttl 查看键值对的生命周期
Ttl key -1(永久)
-2(已过期)
- EXPIRE 设置键值对的存储周期
例:EXPIRE lisi 10 #设置lisi的生命周期是10s
- HSET hashi值存储指令
- Save 同步保存,将当前redis实例的所有数据快照以RDB文件的形式保存到硬盘(#注:不建议在生产环境中执行save命令,在保存过程中,Redis 将无法处理任何新的命令,直到保存过程完成)
- Bgsave 同步保存,不会阻塞客户端请求
- Bgrewriteaof 重写AOF文件,从而减小大小并优化读取效率
redis持久化
Redis 是一个基于内存的键值对存储系统,为了确保数据在服务器重启或者发生故障时不会丢失,它提供了两种持久化方式:RDB(Redis Database)和 AOF(Append Only File)
1.RDB(Redis Database) 安全性,一致性
通过将某个时间点上的数据生成快照保存到磁盘上实现持久化,异步保存,默认持久化
RDB持久化生成的数据快照文件:/var/lib/redis/dump.rdb #数据库启动时读取
触发条件:redis进程退出,宕机,redis程序崩溃,手动保存(save)
2.AOF(Append Only File) 性能,快速恢复
AOF 持久化记录每次写操作的命令并追加到日志文件中,当 Redis 重启时,它会重新执行这些命令来恢复数据,相比于 RDB,AOF 提供更好的数据完整性,因为它是持续记录所有写操作,而 RDB 只是定期快照。AOF 还提供不同的 fsync 策略,用于控制数据同步到磁盘的时间间隔,以平衡数据安全性与性能。
AOF持久化生成的数据快照文件:/var/lib/redis/appendonly.aof
配置AOF持久化:
1.在redis配置文件(/etc/redis.conf中找到appendonly no字段,将no改为yes)
2.重启redis服务
Systemctl restart redis
3.Cd /var/lib/redis/ 查看是否生成了appendonly.aof文件
4. 实时监控AOF持久化机制生成的文件
Tail -f appendonly.ao
5.进入redis中set添加键值对
6.Tail -f appendonly.ao查看是否有新的数据添加
#注:即使启用了持久化,仍然无法完全避免数据丢失的情况,比如硬件故障、电力中断等。因此,建议结合备份策略来进一步保护数据。
频繁地进行 RDB 快照会导致性能下降,特别是在大型数据库的情况下,所以要合理设置 save 参数。
AOF 文件的增长可能会导致磁盘空间不足,需要定期监控和清理。
数据恢复
停止 Redis 服务,然后将备份的 RDB 或 AOF 文件复制到 Redis 的数据目录下。
RDB 文件:直接重启 Redis 服务即可。
AOF 文件:修改配置文件,确保 appendonly 参数设置为 "yes",然后重启 Redis 服务。
注意:
1.在进行数据恢复前,请确保有足够的磁盘空间以及 Redis 配置正确。
2.如果 Redis 服务器有多个数据库实例或分片,需要对每个实例分别进行数据恢复。
3.虽然 Redis 支持数据持久化,但仍然建议结合备份策略来保护数据,防止意外丢失。
4.如果遇到任何问题,比如文件损坏、无法加载等,可以尝试使用官方提供的工具如 redis-check-rdb 和 redis-check-aof 进行检查和修复。