NoSQL之Redis安装配置与优化(理论+实践)
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,关系数据库与非关系型数据库关系型数据库一个结构化的数据库,创建在关系模型基础,上,-般面向于记录包括Oracle、MySQL、 SQL Server、Microsoft Access、DB2等非关系型
千家信息网最后更新 2025年01月23日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 second
Redis多数据库操作
- 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时由于文件尺寸较小导致频繁的BGREWRITEAOF
Redis性能管理
查看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安全错误
数据库的锁怎样保障安全
莱芜区企业基础数据库填报
东莞学习网络安全技术
学软件开发需要自带电脑吗
数据库索引简单
网络安全机构分类
对于软件开发的认知总结
软件开发和研发一样吗
青岛科技大学软件互联网
第三代数据库技术特点
切实筑牢网络安全堤坝
山东大学生网络安全宣传周
网络安全5g 概念
数据库之间接口
建立人员数据库的软件
软件开发增值税即征即退2022
网络安全可靠性报告
高中网络技术应用计划安排
小皮系统的数据库怎么用
武汉图像识别软件开发
阿里云服务器添加网站
网络安全等保测评在哪里做
db2 关系型数据库
星雅服务器
上海专业网络技术产业化
海康远程服务器重开资源管理器
客户机服务器不可用
挖财网络技术有限公司信息
临海大型软件开发维修价格
网络安全病毒防范技术
互联网金融科技的概念股票