NoSQL之Redis安装配置与优化(理论+实践)
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,关系数据库与非关系型数据库关系型数据库一个结构化的数据库,创建在关系模型基础,上,-般面向于记录包括Oracle、MySQL、 SQL Server、Microsoft Access、DB2等非关系型
千家信息网最后更新 2025年12月01日NoSQL之Redis安装配置与优化(理论+实践)
关系数据库与非关系型数据库
关系型数据库
- 一个结构化的数据库,创建在关系模型基础,上,-般面向于记录
- 包括Oracle、MySQL、 SQL Server、Microsoft Access、DB2等
非关系型数据库
- 除了主流的关系型数据库以外的数据库, 都认为是非关系型的
- 包括Redis、MongBD、 Hbase、 CouhDB等
非关系型数据库产生背景
- High performance--对数据库高并发读写需求
- Huge Storage--对海量数据高效存储与访问需求
- High Scalability && High Availability--对数据库高可扩展性与高可用性需求
Redis简介
- Redis基于内存运行并支持持久化
- 采用key-value (键值对)的存储形式
- 优点
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
Redis配置文件
配置参数(/etc/redis/6379.conf)
- bind:监听的主机地址
- port:端口
- daemonize yes:启用守护进程
- pidfile:指定PID文件
- loglevel notice:日志级别
- logfile:指定日志文件
服务搭建实践
安装服务环境组件,并挂载压缩包,编译安装redis
[root@localhost ~]# yum install gcc gcc-c++ make -y //安装环境组件[root@localhost ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ //挂载软件包Password for root@//192.168.100.8/LNMP-C7: [root@localhost ~]# cd /mnt/[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt/ //解压[root@localhost mnt]# cd /opt/redis-5.0.7/[root@localhost redis-5.0.7]# make //编译[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install //安装执行配置Redis配置文件脚本,并进行配置
[root@localhost redis-5.0.7]# cd utils/[root@localhost utils]# ./install_server.sh //执行脚本进行配置Welcome to the redis service installerThis script will help you easily set up a running redis serverPlease select the redis port for this instance: [6379] //默认端口号Selecting default: 6379Please select the redis config file name [/etc/redis/6379.conf] //配置文件存放位置Selected default - /etc/redis/6379.confPlease select the redis log file name [/var/log/redis_6379.log] //日志文件存放位置Selected default - /var/log/redis_6379.logPlease select the data directory for this instance [/var/lib/redis/6379] //数据文件存放位置Selected default - /var/lib/redis/6379Please select the redis executable path [] /usr/local/redis/bin/redis-server //可执行文件路径[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/ //制作链接文件便于系统识别[root@localhost utils]# netstat -ntap | grep 6379 //查看端口是否开启tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 44510/redis-server [root@localhost utils]# /etc/init.d/redis_6379 stop //关闭redis命令Stopping ...Redis stopped[root@localhost utils]# /etc/init.d/redis_6379 start //开启redis命令Starting Redis server...[root@localhost utils]# vim /etc/redis/6379.conf //修改配置文件bind 127.0.0.1 192.168.144.128 //配置监听地址[root@localhost utils]# /etc/init.d/redis_6379 restart //重启redis服务Stopping ...Redis stoppedStarting Redis server...Redis数据库常用命令
redis-cli命令行工具
- 连接本地数据库
[root@localhost utils]# /usr/local/redis/bin/redis-cli127.0.0.1:6379> - 连接远程数据库
[root@localhost utils]# redis-cli -h 192.168.144.128 -p 6379192.168.144.128:6379> 获取命令帮助
192.168.144.128:6379> help set ##help帮助SET key value [expiration EX seconds|PX milliseconds] [NX|XX]summary: Set the string value of a keysince: 1.0.0group: string- set:存放数据
192.168.144.128:6379> set teacher zhangsanOK192.168.144.128:6379> set tea redOK get:获取数据
192.168.144.128:6379> get tea ##查看键的值"red"key相关命令
- keys:获取符合规则的键值列表
127.0.0.1:6379> keys * //查看当前数据库中所有的键127.0.0.1:6379> keys V* //查看当前数据库中以v开头的键127.0.0.1:6379> keys v? //查看当前数据库中以v开头后面包含任意一个字符的键127.0.0.1:6379> keys v?? //查看当前数据库中以v开头后面包含任意二个字符的键192.168.144.128:6379> KEYS * ##查看所有的键1) "teacher"2) "tea"192.168.144.128:6379> keys t?? ##查看键是t开头后面是两个字符的1) "tea" - exists:判断键值是否存在
192.168.144.128:6379> EXISTS tea(integer) 1 //1是存在192.168.144.128:6379> EXISTS teas(integer) 0 //0是不存在 - del:删除当前数据库的指定key
192.168.144.128:6379> del teacher ##删除键(integer) 1192.168.144.128:6379> KEYS *1) "tea" - type:获取key对应的value值类型
192.168.144.128:6379> type tea ##查看键的类型string - rename(覆盖) / renamenx (不覆盖) :对已有的key进行重命名
192.168.144.128:6379> rename tea t1 ##给键重命名OK192.168.144.128:6379> keys *1) "t1"192.168.144.128:6379> get t1"red" - dbsize:查看当前数据库中key的数目
192.168.144.128:6379> dbsize(integer) 1 - redis-benchmark测试工具
- -h:指定服务器主机名
- -p:指定服务器端口
- -c:指定并发连接数
- -n:指定请求数
- -d:以字节的形式指定SET/GET值的数据大小
- -q:强制推出redis。仅显示query/sec值
[root@localhost utils]# redis-benchmark -h 192.168.144.128 -p 6379 -c 100 -n 100000 //并发100,100000个请求====== SET ======100000 requests completed in 1.14 seconds //请求花费的时间100 parallel clients3 bytes payloadkeep alive: 184.66% <= 1 milliseconds98.48% <= 2 milliseconds99.69% <= 3 milliseconds99.90% <= 18 milliseconds100.00% <= 18 milliseconds87642.41 requests per second====== GET ======100000 requests completed in 1.144 seconds100 parallel clients3 bytes payloadkeep alive: 1[root@localhost utils]# redis-benchmark -h 192.168.144.128 -p 6379 -q -d 100 //以字节形式指定set/get值的数据大小SET: 90497.73 requests per secondGET: 90991.81 requests per secondRedis多数据库操作
- Redis支持多数据库,默认支持16个数据库, 0-15命名
- 多数据库相互独立,互不干扰
- 多数据库常用命令
- 多数据库间切换
192.168.144.128:6379> select 10 //进入第11个库OK192.168.144.128:6379[10]> keys *(empty list or set)192.168.144.128:6379[10]> select 0 //进入第1个库OK - 多数据库间移动数据
192.168.144.128:6379> move t1 10 //移动键值对到第11个库(integer) 1192.168.144.128:6379> select 10 //进入第11个库OK192.168.144.128:6379[10]> keys * //查看键1) "t1"192.168.144.128:6379[10]> get t1"red"
- 多数据库间切换
- 清除数据库内数据
192.168.144.128:6379[10]> flushdb //清除库中数据OK192.168.144.128:6379[10]> keys * //查看所有键(empty list or set)Redis持久化
持久化概述
- Redis是运行在内存中,内存中的数据断电丢失
- 为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化
持久化的分类
- RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
- 优点:资源占用低
- 缺点:不能保证数据的实时保存
AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
- 优点:实时记录数据
- 缺点:资源损耗大,数据丢失时同步时间过长
RDB持久化
- Redis的默认持久化方式
- 默认文件名dump.rdb
- 触发条件
- 在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
- 执行save或者bgsave(异步)命令
- 执行flushall命令,清空数据库中所有数据(不建议使用)
- 执行shutdown命令,保证服务器正常关闭且不丢失任何数据
- 优缺点
- 适合大规模的数据恢复
- 如果业务对数据完整性和一致性要求不高,RDB是很好的选择
- 数据的完整性和一致性不高
- 备份时占用内存
通过RDB文件恢复数据
- 将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可
配置文件选项
[root@localhost utils]# vim /etc/redis/6379.conf save 900 1 //900秒之内至少一次写操作save 300 10 //300秒之内至少发生10次写操作save 60 10000 //60秒之内发生至少10000次写操作;只要满足其一都会触发快照操作,注释所有的save项表示关闭RDBdbfilename dump.rdb //备份文件名称dir /var/lib/redis/6379 //备份文件保存目录rdbcompression yes //开启压缩AOF持久化
- Redis默认不开启
- 弥补RDB的不足(数据的不一致性)
- 采用日志的形式来记录每个写操作,并追加到文件中
- Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
根据AOF文件恢复数据
- 将appendonly.aof文件拷贝到redis安装目录的bin目录下,重启redis服务即可
AOF持久化配置
[root@localhost utils]# vim /etc/redis/6379.conf appendonly yes //开启AOF持久化appendfilename "appendonly.aof" //AOF文件名称# appendfsync always //always:同步持久化,每次发生数据变化会立刻写入磁盘appendfsync everysec //everysec:默认推荐,每秒异步记录次(默认值)# appendfsync no //no:不同步,交给操作系统决定如何同步aof-load-truncated yes //忽略最后一条可能存在问题的指令AOF的重写机制
- AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
- 当AOF文件的大小超过所设定的阀值时,Redis就会对AOF文件的内容压缩
AOF重写的原理
- Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件
AOF重写配置
[root@localhost utils]# vim /etc/redis/6379.conf no-appendfsync-on-rewrite no //在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为noauto-aof-rewrite-percentage 100 //当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作auto-aof-rewrite-min-size 64mb //当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOFRedis性能管理
查看redis内存使用
[root@localhost utils]# /usr/local/redis/bin/redis-cli127.0.0.1:6379> info memory内存碎片率
- 操系统分配的内存值used_memory_rss除以redis使用的内存值used_memory计算得出
- 内存碎片是由操作系统低效的分配/回收物理内存导致的
- 不连续的物理内存分配
跟踪内存碎片率对理解redis实例的资源性能是非常重要的
- 内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
- 内存碎片率超过1.5,说明redis消耗了实际需要物理内存的150%,其中50%是内存碎片率
- 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换
内存使用率
- redis实例的内存使用率超过可用最大内存,操作系统将开始进行
- 内存与swap空间交换
避免内存交换
- 针对缓存数据大小选择
- 尽可能的使用Hash数据结构
- 设置key的过期时间
回收key
- 保证合理分配redis有限的内存资源
- 当内存使用达到设置的最大阀值时,需要选择一种key的回收策略
- 默认情况下回收策略是禁止删除
- redis.conf配置文件中修改maxmemory-policy属性值
- volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据
- volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰(建议使用)
- volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰
- allkeys-lru:使用LRU算法从所有数据集合中淘汰数据
- allkeys-random:从数据集合中任意选择数据淘汰
- no-enviction:禁止淘汰数据
数据
文件
内存
数据库
配置
命令
日志
碎片
服务
时间
系统
大小
支持
方式
目录
分配
同步
操作系统
备份
开头
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术应用题山东
计算机网络技术招生
QT软件开发工程师招聘
上海科技出版社网络技术应用
供电公司计算机网络安全知识
nas新建数据库
流放之路服务器大区列表
嵌入式软件开发流程分为
致远生涯数据库靠不靠谱
加班管理系统数据库课程设计
连接服务器主机电脑都没反应
朱雅莉软件开发
广东三调初始数据库怎么制作
广州云迹网络技术口碑
软件开发认可 云趣科技
数据库的安全性保护和完整性保护
虹口区网络技术产业化
数据库快捷键保存
四川管理系统软件开发外包
和龙软件开发生产公司
服务器怎么使用链路聚合
特种部队网络技术侦察
陕西电商软件开发公司
互联网科技转正汇报ppt
商企汇网络技术有限公司
西安服务器崩溃事件处理了谁
国家地名信息数据库平台
去通信公司做软件开发好不好
网络安全与电子通信
网络安全宣讲案例