千家信息网

缓存数据库Redis——Redis部署与配置

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,关系型数据库与非关系型数据库关系型数据库:一个机构化的数据库,创建在关系模型基础上,一般面向于记录包括oracle、mysql、sqlserver、db2非关系型数据库:除了主流的关系型数据库意外的数
千家信息网最后更新 2025年11月07日缓存数据库Redis——Redis部署与配置

关系型数据库与非关系型数据库

关系型数据库:

一个机构化的数据库,创建在关系模型基础上,一般面向于记录
包括oracle、mysql、sqlserver、db2

非关系型数据库:

除了主流的关系型数据库意外的数据库,都人为是非关系型的
包括redis、mongdb、hbase、couhdb

非关系型数据库产生背景

  • 对数据库高并发读写需求
  • 对海量数据高效存储与访问需求
  • 对数据库高可扩展性与高可用需求

Redis简介

Redis基于内存运行并支持持久化

采用key-value(键值对)的存储形式

优点:

  • 具有极高的数据读写速度
  • 支持丰富的数据类型
  • 支持数据的持久化
  • 原子性
  • 支持数据备份

安装与配置Redis

1、安装必要的环境组件,并安装redis

[root@localhost ~]# yum install gcc gcc-c++ make -y  ##安装环境组件[root@localhost ~]# mkdir /mnt/tools[root@localhost ~]# mount.cifs //192.168.100.100/tools /mnt/tools/  ##挂载Password for root@//192.168.100.100/tools:  [root@localhost ~]# cd /mnt/tools/redis/[root@localhost redis]# lsredis-5.0.7.tar.gz[root@localhost redis]# tar xf redis-5.0.7.tar.gz -C /opt/   ##解压[root@localhost redis]# cd /opt/[root@localhost opt]# lsredis-5.0.7  rh[root@localhost opt]# cd redis-5.0.7/[root@localhost redis-5.0.7]# make   #编译..........//省略过程[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install   ##安装..........//省略过程

2、执行配置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##可执行文件路径Selected config:Port           : 6379Config file    : /etc/redis/6379.confLog file       : /var/log/redis_6379.logData dir       : /var/lib/redis/6379Executable     : /usr/local/redis/bin/redis-serverCli Executable : /usr/local/redis/bin/redis-cliIs this ok? Then press ENTER to go on or Ctrl-C to abort.Copied /tmp/6379.conf => /etc/init.d/redis_6379Installing service...Successfully added to chkconfig!Successfully added to runlevels 345!Starting Redis server...Installation successful! [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      18004/redis-server  [root@localhost utils]# /etc/init.d/redis_6379 stop  ##关闭redisStopping ...Redis stopped[root@localhost utils]# netstat -ntap | grep 6379   ##查看监听端口tcp        0      0 127.0.0.1:6379          127.0.0.1:33970         TIME_WAIT   -   [root@localhost utils]# /etc/init.d/redis_6379 start  ##开启redisStarting Redis server...[root@localhost utils]# netstat -ntap | grep 6379tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      18091/redis-server  tcp        0      0 127.0.0.1:6379          127.0.0.1:33970         TIME_WAIT   -                   [root@localhost utils]# [root@localhost utils]# vim /etc/redis/6379.conf   ##修改配置文件bind 127.0.0.1 192.168.52.149  ##设置监听地址[root@localhost utils]# /etc/init.d/redis_6379 restart  ##重启redis服务Stopping ...Redis stoppedStarting Redis server...###Redis数据库基础操作[root@localhost utils]# redis-cli -h 192.168.52.149 -p 6379   ##登录redis192.168.52.149:6379> help @list    ##获取帮助列表  BLPOP key [key ...] timeout  summary: Remove and get the first element in a list, or block until one is available  since: 2.0.0...............................//省略部分内容 RPUSHX key value  summary: Append a value to a list, only if the list exists  since: 2.2.0192.168.52.149:6379> help set  ##help帮助    SET key value [expiration EX seconds|PX milliseconds] [NX|XX]    summary: Set the string value of a key    since: 1.0.0    group: string192.168.52.149:6379> set name zhangsan   ##设置键值对OK192.168.52.149:6379> set net wwwOK192.168.52.149:6379> KEYS *   ##查看所有的键1) "name"2) "net"192.168.52.149:6379> KEYS n??  ##查看键是n开头后面是两个字符的1) "net"192.168.52.149:6379> KEYS n*   ##查看键是n开头的1) "name"2) "net"192.168.52.149:6379> GET net   ##查看键的值"www"192.168.52.149:6379> EXISTS net  ##查看键是否存在(integer) 1     ##1是存在,0是不存在192.168.52.149:6379> EXISTS nat(integer) 0192.168.52.149:6379> del net  ##删除键(integer) 1192.168.52.149:6379> KEYS *1) "name"192.168.52.149:6379> type name   ##查看键的类型string192.168.52.149:6379> rename name n1   ##给键重命名OK192.168.52.149:6379> KEYS *1) "n1"192.168.52.149:6379> get n1"zhangsan"192.168.52.149:6379> hset person score 80    ##用hash方式建立键值对(integer) 1192.168.52.149:6379> hset person name zhangsan   ##用hash方式建立键值对(integer) 1192.168.52.149:6379> hset person age 30   ##用hash方式建立键值对(integer) 1192.168.52.1490:6379> KEYS *1) "person"192.168.52.149:6379> hget person name   ##获取键的值"zhangsan"192.168.52.149:6379> hget person age   ##获取键的值"30"192.168.52.149:6379> set name lisi   ##获取键的值OK192.168.52.149:6379> KEYS *1) "name"2) "person"192.168.52.149:6379> EXPIRE name 10   ##设置键的自动删除时间10s(integer) 1192.168.52.149:6379> KEYS *    ##10s内查看所有键1) "name"2) "person"192.168.52.149:6379> KEYS *   ##10s后查看所有键1) "person"192.168.52.149:6379> exit   ##退出

3、进行压测

[root@localhost utils]# redis-benchmark -h 192.168.52.149 -p 6379 -c 100 -n 100000##并发100,100000个请求====== SET ======    100000 requests completed in 1.14 seconds   ##请求花费的时间    100 parallel clients    3 bytes payload    keep 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.13 seconds    100 parallel clients    3 bytes payload    keep alive: 1[root@localhost utils]# redis-benchmark -h 192.168.52.149 -p 6379 -q -d 100    ##以字节形式指定set/get值的数据大小    SET: 90497.73 requests per second    GET: 90991.81 requests per second

4、移动键值对到其他的库中(一共16个库)

[root@localhost utils]# redis-cli -h 192.168.52.149 -p 6379         ##进入Redis            192.168.52.149:6379> KEYS *1) "mylist"2) "counter:__rand_int__"3) "n1"4) "key:__rand_int__"5) "myset:__rand_int__"192.168.52.149:6379> SELECT 10  ##进入第11个库OK192.168.52.149:6379[10]> KEYS *(empty list or set)192.168.52.149:6379[10]> SELECT 0  ##进入第1个库OK192.168.52.149:6379> MOVE n1 10  ##移动键值对到第11个库(integer) 1192.168.52.149:6379> KEYS *1) "mylist"2) "counter:__rand_int__"3) "key:__rand_int__"4) "myset:__rand_int__"192.168.52.149:6379> SELECT 10  ##进入第11个库OK192.168.52.149:6379[10]> KEYS *   ## 查看键1) "n1"192.168.52.149:6379[10]> GET n1"zhangsan"192.168.52.149:6379[10]> FLUSHDB  ##清除库中数据OK192.168.52.149:6379[10]> KEYS *     ##查看所有键(empty list or set)192.168.52.149:6379[10]> SELECT 0   ##切换到第一个库OK192.168.52.149:6379>KEYS *      ##查看所有的键1) "myset:__rand_int__"2) "mylist"3) "key:__rand_int__"4) "counter:__rand_int__"192.168.52.149:6379> exit[root@localhost utils]# 

Redis持久化

Redis是运行在内存中,内存中的数据断电丢失
为了能后重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化

持久化分类

  • RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
  • AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化

RDB持久化

Redis的默认持久化方式
默认文件名dump.rdb

触发条件:

  • 在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
  • 执行save或者是bgsave(异步)命令
  • 执行flushall命令,清空数据库所有数据
  • 执行shutdown命令,保证服务器正常关闭且不丢失任何数据

优缺点:

  • 适合大规模的数据恢复
  • 如果业务对数据完整性和一致性要求不高,RDB是很好的选择
  • 数据的完整性和一致性不高
  • 备份时占用内存

通过RDB文件恢复数据

将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可

配置RDB持久化

[root@localhost utils]# vim /etc/redis/6379.conf #900秒之内至少一次写操作save 900 1#300秒之内至少发生10次写操作save 300 10#60秒之内发生至少10000次写操作save 60 10000#只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB#RDB文件名称dbfilename dump.rdb#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 #开启AOF持久化appendonly yes#AOF文件名称appendfilename "appendonly.aof"#always:同步持久化,每次发生数据变化会立刻写入磁盘# appendfsync always#everysec:默认推荐,每秒异步记录次(默认值)appendfsync everysec#no:不同步,交给操作系统决定如何同步# appendfsync no#忽略最后一条可能存在问题的指令aof-load-truncated yes

AOF的重写机制

AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
当AOF文件的大小超过所设定的阀值时,Redis就会对AOF文件的内容压缩

AOF重写的原理

Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件

AOF重写配置

[root@localhost utils]# vim /etc/redis/6379.conf #在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,#只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为nono-appendfsync-on-rewrite no#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作auto-aof-rewrite-percentage 100#当前AOF文件执行BGREWRITEAOF命令的最小值,#避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOFauto-aof-rewrite-min-size 64mb

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安全错误 数据库的锁怎样保障安全 微信总部数据库能查到多久的记录 宁波磐天网络技术有限公司 网络安全小知识宣传图片 手机号码注销网络安全吗 数据库管理的应用场景 一级学科网络安全点 web网络安全培训机构 义乌宝腾网络技术有限公司 广州宾果游戏网络技术有限公司 支付宝抢9价服务器爆满 软件开发专业周记40篇 华为云服务器操作记录在哪看 现代战争5服务器超载怎么回事 各类软件开发模型的优缺点 辽宁招聘网络安全渗透工程师 同一个网段两个dhcp服务器 kaotalk连不上服务器教学 我的世界ice服务器主人是谁 传说对决为什么会无法连接服务器 两台服务器通过网线连接 车联网软件开发有前途吗 义乌宝腾网络技术有限公司 如何做好网络安全保护工作 hax.co.id服务器 辽宁特色软件开发管理模式 桔子水晶酒店的网络安全 360网络安全认证考试题库 嘟嘟视界软件开发 软件开发螺旋模型的含义 花生壳 壳域名 邮箱服务器
0