千家信息网

Redis配置与优化

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,Redis配置与优化Redis概述Redis 是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到
千家信息网最后更新 2024年12月13日Redis配置与优化

Redis配置与优化

Redis概述

Redis 是一个高性能的key-value数据库。

redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis优点

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

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.142.1/redis /mntPassword for root@//192.168.142.1/redis:  #解压源码包[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#建立服务命令软链接到系统[root@localhost redis-5.0.7]# ln -s /usr/redis/bin/* /usr/local/bin/#切入utils目录[root@localhost redis-5.0.7]# cd /opt/redis-5.0.7/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#此处需手动指定扩展目录路径/usr/local/redis/bin/redis-server#使用进程控制启动服务[root@localhost utils]# /etc/init.d/redis_6379 startStarting Redis server...#配置redis的6379.conf文件,追加监听地址[root@localhost utils]# vim /etc/redis/6379.conf bind 127.0.0.1 192.168.142.136#重启服务[root@localhost utils]# /etc/init.d/redis_6379 restartStopping ...Redis stoppedStarting Redis server...

Redis常用命令演示

#连接本地数据库[root@localhost utils]# /usr/local/redis/bin/redis-cli127.0.0.1:6379> #连接远程数据库[root@localhost utils]# redis-cli -h 192.168.142.136 -p 6379192.168.142.136:6379> [root@localhost utils]# /usr/local/redis/bin/redis-cli#获取set命令帮助127.0.0.1:6379> help set  SET key value [expiration EX seconds|PX milliseconds] [NX|XX]  summary: Set the string value of a key  since: 1.0.0  group: string#存放数据127.0.0.1:6379> set teacher wangminOK#获取数据127.0.0.1:6379> get teacher"wangmin"#查看当前数据库所有键127.0.0.1:6379> keys *1) "teacher"2) "st"3) "teacer"4) "stu"5) "student"#查看当前数据库中127.0.0.1:6379> keys t*1) "teacher"2) "teacer"#查看当前数据库中以s开头后面包含任意一个及字符的键127.0.0.1:6379> keys s?1) "st"#查看当前数据库中以s开头后面包含任意二个及字符的键127.0.0.1:6379> keys s??1) "stu"#判断键值是否存127.0.0.1:6379> exists stu(integer) 1#返回int值为1,则表示键值存在127.0.0.1:6379> exists std(integer) 0#返回int值为0,则表示键值不存在#删除当前数据库的指定key127.0.0.1:6379> del st(integer) 1#获取可以对应的value值类型127.0.0.1:6379> type stustring#对已有的可以进行重命名覆盖127.0.0.1:6379> rename student studOK127.0.0.1:6379> get stud"yuanyuan"#对已有的可以进行重命名不覆盖127.0.0.1:6379> renamenx stud st(integer) 1127.0.0.1:6379> get st"yuanyuan"#查看当前数据库中key的数目127.0.0.1:6379> dbsize(integer) 4

redis-benchmark测试工具

-h:指定服务器主机名-p:指定服务器端口-C:指定并发连接数-n: 指定请求数-d:以字节的形式指定SET/GET值的数据大小-q:强制推出redis。仅显示query/sec值

1.向IP地址为192.168.142.136端口为6379的redis服务器发送100个并发连接与100000个请求测试性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -c 100 -n 100000...#主要查看set和get性能参数====== SET ======  100000 requests completed in 1.03 seconds  100 parallel clients  3 bytes payload  keep alive: 193.23% <= 1 milliseconds99.09% <= 2 milliseconds99.82% <= 3 milliseconds100.00% <= 3 milliseconds96993.21 requests per second====== GET ======  100000 requests completed in 1.05 seconds  100 parallel clients  3 bytes payload  keep alive: 192.05% <= 1 milliseconds99.12% <= 2 milliseconds99.75% <= 3 milliseconds99.90% <= 7 milliseconds99.93% <= 8 milliseconds100.00% <= 8 milliseconds94966.77 requests per second...

2.测试存取大小为100字节的数据包的性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -d 100...#主要查看set和get性能参数====== SET ======  100000 requests completed in 1.05 seconds  50 parallel clients  100 bytes payload  keep alive: 199.17% <= 1 milliseconds99.79% <= 2 milliseconds100.00% <= 2 milliseconds95328.88 requests per second====== GET ======  100000 requests completed in 1.02 seconds  50 parallel clients  100 bytes payload  keep alive: 199.29% <= 1 milliseconds99.70% <= 2 milliseconds100.00% <= 2 milliseconds97751.71 requests per second...

Redis多数据库操作

Redis支持多数据库,默认支持16个数据库,0-15命名,多数据库相互独立,互不干扰

多数据库常用命令

#多数据库间切换#默认在第一个数据库中127.0.0.1:6379> select 10OK127.0.0.1:6379[10]> select 15OK127.0.0.1:6379[15]> #多数据库间移动数据127.0.0.1:6379> move st 3(integer) 1#切换数据库并查看键值127.0.0.1:6379> select 3OK127.0.0.1:6379[3]> keys *1) "st"#清除数据库内数据127.0.0.1:6379[3]> flushdbOK127.0.0.1:6379[3]> keys *(empty list or set)

Redis持久化

持久化概述

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

持久化分类

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

RDB持久化

Redis的默认持久化方式默认文件名dump.rdb触发条件●在指定的时间间隔内,执行指定次数的写操作(配置文件控制)●执行save或者是bgsave (异步) 命令●执行flushall命令,清空数据库所有数据●执行shutdown命令,保证服务器正常关闭且不丢失任何数据优缺点●适合大规模的数据恢复●如果业务对数据完整性和一致性要求不高,RDB是很好的选择●数据的完整性和一致性不高●备份时占用内存

配置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持久化

[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# Memoryused_memory:11767592used_memory_human:11.22M        #内存使用率used_memory_rss:23867392used_memory_rss_human:22.76Mused_memory_peak:24877056used_memory_peak_human:23.72Mused_memory_peak_perc:47.30%used_memory_overhead:841518used_memory_startup:791416used_memory_dataset:10926074used_memory_dataset_perc:99.54%allocator_allocated:12177712allocator_active:12488704allocator_resident:19542016total_system_memory:1911832576total_system_memory_human:1.78Gused_memory_lua:37888used_memory_lua_human:37.00Kused_memory_scripts:0used_memory_scripts_human:0Bnumber_of_cached_scripts:0maxmemory:0maxmemory_human:0Bmaxmemory_policy:noevictionallocator_frag_ratio:1.03allocator_frag_bytes:310992allocator_rss_ratio:1.56allocator_rss_bytes:7053312rss_overhead_ratio:1.22rss_overhead_bytes:4325376mem_fragmentation_ratio:2.04        #内存碎片率mem_fragmentation_bytes:12140824mem_not_counted_for_evict:0mem_replication_backlog:0mem_clients_slaves:0mem_clients_normal:49694mem_aof_buffer:0mem_allocator:jemalloc-5.1.0active_defrag_running:0lazyfree_pending_objects:0

内存碎片率

●操系统分配的内存值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:禁止淘汰数据

感谢阅读~ ~ ~ ~

0