03-NoSQL之Redis配置与优化

一、redis与memcache总体对比

1.性能

Redis:只使用单核,平均每一个核上Redis在存储小数据时比Memcached性能更高。

Memcached:可以使用多核,而在100k以上的数据中,Memcached性能要高于Redis。

2.内存使用效率

MemCached:使用简单的key-value存储,Memcached的内存利用率更高。

Redis:如果采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。

3.内存空间和数据量大小

MemCached:可以修改最大内存,采用LRU算法。Memcached单个key-value大小有限,一个value最大只支持1MB。

Redis:增加了VM的特性,突破了物理内存的限制。Redis单个key-value大小最大支持512MB 。

4.数据结构支持

MemCached:数据结构单一,仅用来缓存数据。

Redis:支持更加丰富的数据类型,Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。

5.可靠性

Memcached:只是个内存缓存,对可靠性要求低。MemCached不支持数据持久化,断电或重启后数据消失,但稳定性是有保证的。

Redis:对可靠性要求高,支持数据持久化和数据恢复,允许单点故障,同时也会影响部分性能。支持数据的备份,即master-slave模式的数据备份。Redis支持数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用。

6.应用场景

Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量场景。

Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统。

2.实验案例

1.redis的安装

先把防火墙关掉

先把防火墙关掉
systemctl stop firewalld
set setenforce 0[root@localhost ~]# yum -y install gcc* zlib-devel
解压 redis包
[root@localhost ~]# tar xvzf redis-4.0.9.tar.gz 
[root@localhost ~]# cd redis-4.0.9/ make

2:查看进程
[root@localhost utils]# netstat -anpt | grep redis

3:redis服务控制
[root@localhost ~]#/etc/init.d/redis_6379 stop 
[root@localhost ~]#/etc/init.d/redis_6379 start 
[root@localhost ~]#/etc/init.d/redis_6379 restart 
[root@localhost ~]#/etc/init.d/redis_6379 status 

4.配置参数的修改
[root@localhost ~]#vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.10.101   	//监听的主机地址 
port 6379 		//端口 
daemonize yes 	//启用守护进程 
pidfile /var/run/redis_6379.pid 	//指定 PID 文件 
loglevel notice 	//日志级别 
logfile /var/log/redis_6379.log 	//指定日志文件 [root@localhost~]#/etc/init.d/redis_6379 restart 
[root@localhost utils]# netstat -anpt | grep redis

二:Redis 命令工具
 redis-server:用于启动 Redis 的工具; 
 redis-benchmark:用于检测 Redis 在本机的运行效率; 
 redis-check-aof:修复 AOF 持久化文件; 
 redis-check-rdb:修复 RDB 持久化文件; 
 redis-cli:Redis 命令行工具。

redis常用命令:

set         创建
get         查看
keys *   查看所有
rename (会覆盖) 
renamenx (检查有没有同名,然后再决定是否执行 rename 命令,)
del        (命令可以删除当前数据库的指定 key)
exists    (命令可以判断键值是否存在)
type      (使用 type 命令可以获取 key 对应的 value 值类型)
select    (切换数据库)
move    (移动数据)
flushdb (清空当前数据库数据)
flushall  (清空所有数据库的数据)

 -p:指定服务器端口; 
 -s:指定服务器 socket; 
 -c:指定并发连接数; 
 -n:指定请求数; 
 -d:以字节的形式指定 SET/GET 值的数据大小; 
 -k:1=keep alive 0=reconnect; 
 -r:SET/GET/INCR 使用随机 key, SADD 使用随机值; 
 -P:通过管道传输<numreq>请求; 
 -q:强制退出 redis。仅显示 query/sec 值; 
 --csv:以 CSV 格式输出;
 -l:生成循环,永久执行测试; 
 -t:仅运行以逗号分隔的测试命令列表; 
 -I:Idle 模式。仅打开 N 个 idle 连接并等待。

五:Redis 持久化

Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为半持久化模式”);也可以把每一次数据变化都写入到一个 append only file(aof)里面(这称为全持久化模式”)

由于 Redis 的数据都存放在内存中,如果没有配置持久化,Redis 重启后数据就全丢失了。所以,需要开启 Redis 的持久化功能,将数据保存到磁盘上,当 Redis 重启后,可以从磁盘中恢复数据。Redis 提供两种方式进行持久化,一种是 RDBRedis DataBase 持久化(原理是将 Reids在内存中的数据库记录定时 dump 到磁盘上的 RDB 持久化),另外一种是 AOFappend only file持久化(原理是将 Reids 的操作日志以追加的方式写入文件)。

1:RDB 和 AOF 的区别

(1)RDB是什么?

默认采用的方法

RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。

触发机制:手动触发分别对应为save和bgsave命令

save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较多的实例会造成时间阻塞。线上环境不建议使用。

bgsave命令:Redis进程执行fork(用于创建进程的函数)操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段。

(2)RDB的优缺点:

RDB的优点:

RDB是一个紧凑压缩的二进制文件,代表Redis在某一个时间点上的数据快照。非常适用于备份,全量复制等场景。比如每6小时执行bgsave备份,并把RDB文件拷贝到远程机器或者文件系统中,用于灾难恢复。

Redis加载RDB恢复数据远远快于AOF方式。

RDB的缺点:

RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运行都有执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。

RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题。

二、AOF是什么

AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流

二者选择的标准:

牺牲一些性能,换取更高的缓存一致性(AOF),

写操作频繁的时候,不启用备份来换取更高的性能,待手动运行 save 的时候,再做备份(RDB

备注:

如果redies重启之后,需要加载一个持久化文件,有限会选择AOF文件。

如果先开启了RDB,再开启AOF,RDB先执行了持久化,那么RDB文件中的内容会被AOF覆盖掉。

3:Redis 持久化配置

(1)RDB 持久化配置

[root@localhost ~]# vim /etc/redis/6379.conf

打开 6379.conf 文件之后,搜索 save,可以看到如下所示配置信息。

  •  save 900 1:在 900 秒(15 分钟)之后,如果至少有 1 个 key 发生变化,则 dump内存快照。
  •  save 300 10:在 300 秒(5 分钟)之后,如果至少有 10 个 key 发生变化,则 dump内存快照。
  •  save 60 10000:在 60 秒(1 分钟)之后,如果至少有 10000 个 key 发生变化,则dump 内存快照。
  • dbfilename dump.rdb :RDB文件名称           ##254行
  • dir /var/lib/redis/6379 :RDB文件路径          ##264行
  • rdbcompression yes :是否进行压缩               ##242行

(2)AOF 持久化配置

Redis 的配置文件中存在三种同步方式,它们分别是:

  • appendonly yes  :开启AOF持久化(默认为no)                ##673行
  • appendfilename "appendonly.aof "  :AOF文件名称            ##677行
  • # appendfsync always
  • appendfsync everysec
  • # appendfsync no

always:同步持久化,每次发生数据变化会立刻写入磁盘

everysec:默认推荐,每秒异步记录一次(默认值)

no:不同步,交给操作系统决定如何同步

  • aof-load-truncated yes          ##769行

忽略最后一条可能存在问题的指令

[root@localhost ~]#/etc/init.d/redis_6379 restart

(2)AOF重写

为了解决 AOF 文件体积不断增大的问题,用户可以向 Redis 发送 BGREWRITEAOF命令。BGREWRITEAOF 命令会通过移除 AOF 文件中的冗余命令来重写(rewriteAOF文件,使 AOF 文件的体积尽可能地变小。

127.0.0.1:6379> bgrewriteaof

Background append only file rewriting started

# 在日志进行BGREWRITEAOF时,如果no-appendfsync-on-rewrite设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后再写入。Redis中默认为no

no-appendfsync-on-rewrite no 

# 当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作

auto-aof-rewrite-percentage 100 

备注:

100指的是aof文件增长比例,指当前aof文件比上次重写的增长比例大小100为两倍

#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF

auto-aof-rewrite-min-size 64mb

六:性能管理

1:查看内存信息

192.168.9.236:7001> info memory

used_memory:1210776 #已经内存使用的大小,以字节为单位
used_memory_human:1.15M # 带单位展示,以M为单位
used_memory_rss:7802880 # 从操作系统角度看redis内存占用多少
used_memory_rss_human:7.44M # 带单位展示
maxmemory:1073741824 # 最大内存大小
maxmemory_human:1.00G # 带单位展示

2:回收策略

maxmemory-policy:回收策略

Ø volatile-lru:它允许 Redis 从整个数据集中挑选最近最少使用的 key 进行删除

Ø volatile-ttl按照key的过期时间进行淘汰

Ø volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰;

Ø allkeys-lru:使用 LRU 算法从所有数据集合中淘汰数据;

Ø allkeys-random:从数据集合中任意选择数据淘汰;

Ø noeviction:禁止淘汰数据(默认值)

备注:

设置key的过期时间

expire v1 10

v1的过期时间为10秒

备注:

Redis 由于内存压力需要回收一个 key 时,Redis 首先考虑的不是回收最旧的数据,而是在最近最少使用的 key 或即将过期的 key 中随机选择一个 key,从数据集中删除

redis设置密码

  一、设置方法

  方法一:通过配置文件redis.conf设置密码

  找到requirepass关键字,后面就是跟的密码,默认情况下是注释掉的,即默认不需要密码,如下:

  

   打开注释,设置为自己的密码,重启即可

  方法二:通过命名设置密码

  使用redis-cli连接上redis,执行如下命令

config set requirepass 123456

  执行完毕,无需重启,退出客户端,重新登录就需要输入密码了

  二、连接方法

  1、连接时输入密码

[root@localhost bin]# ./redis-cli -a 123456

  2、先连接再输入密码

[root@localhost bin]# ./redis-cli127.0.0.1:6379> auth 123456

  三、关闭方法

[root@localhost bin]# ./redis-cli -a 123456 shutdown

  四、区别

  1)修改配置文件设置的密码永久生效;使用命令设置的密码临时生效,重启后失效

  2)修改配置文件设置的密码,需要重启生效;使用命令设置的密码,退出后再登录生效,重启后失效

  3)命令的优先级高于配置文件的优先级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/43587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot文达办公物资管理系统-计算机毕业设计源码51191

摘要 本文介绍了一种名为"文达办公物资管理系统"的基于JAVA语言、基于Springboot框架和MYSQL数据库开发的管理系统。该系统主要分为管理员和员工用户两个角色&#xff0c;以满足不同用户的需求。 对于管理员用户&#xff0c;系统提供了仪器设备管理、设备借用管理、设…

【大数据技术】换新电脑了,如何快速迁移MySQL到新电脑上(含程序+数据),这样既快速又高效,省去了“各种安装+各种配置+各种迁移数据”带来的麻烦和时间

【大数据技术】换新电脑了&#xff0c;如何快速迁移MySQL到新电脑上(含程序数据 背景步骤总结 背景 很久没有写博文了哦&#xff0c;最近我换了新的笔记本,于是需要在新笔记本电脑上搭建MySQL环境&#xff0c;因为我原电脑上是安装的MySQL解压版&#xff0c;故我想偷偷懒&…

可理解性评估:使用Google Gemini优化语音识别的意义保留

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

nftables(5)表达式(3)PAYLOAD EXPRESSIONS

PAYLOAD EXPRESSIONS Payload expressions在nftables中扮演着重要的角色&#xff0c;因为它们允许用户定义复杂的规则&#xff0c;这些规则可以基于数据包的内容&#xff08;即有效载荷&#xff09;来过滤、修改或允许数据包通过。这些表达式可以执行诸如数据拷贝、比较、位操…

实验1 —— 安全策略的练习

实验拓扑图 实验要求 1.DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00-18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问&#xff1b; 2.生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3.办公区…

RabbitMQ保证消息被成功发送和消费

一 : 在使用 RabbitMQ 作为消息队列时&#xff0c;保证消息被成功发送和消费是一个非常重要的问题。以下是一些关键点和最佳实践&#xff0c;以确保消息的可靠传输和处理。* 配置方式: 保证消息被成功发送 确认模式&#xff08;Confirm Mode&#xff09;&#xff1a;生产者可以…

在SpringBoot使用AOP防止接口重复提交

前言 防止接口重复提交有跟多种方法&#xff0c;可以在前端做处理。同样在后端也能处理&#xff0c;而且后端的处理也有很多中方法。最先能想到的就是加锁&#xff0c;也可以直接在该接口的实现过程中进行处理&#xff08;可以参考防止数据重复提交的6种方法(超简单)&#xff…

动手学Avalonia:基于硅基流动构建一个文生图应用(一)

文生图 文生图&#xff0c;全称“文字生成图像”&#xff08;Text-to-Image&#xff09;&#xff0c;是一种AI技术&#xff0c;能够根据给定的文本描述生成相应的图像。这种技术利用深度学习模型&#xff0c;如生成对抗网络&#xff08;GANs&#xff09;或变换器&#xff08;T…

【Mac】Charles for Mac(HTTP协议抓包工具)及同类型软件介绍

软件介绍 Charles for Mac 是一款功能强大的网络调试工具&#xff0c;主要用于HTTP代理/HTTP监视器。以下是它的一些主要特点和功能&#xff1a; 1.HTTP代理&#xff1a;Charles 可以作为HTTP代理服务器&#xff0c;允许你查看客户端和服务器之间的所有HTTP和SSL/TLS通信。 …

金航标kinghelm宋仕强在介绍自己公司时说

金航标kinghelm宋仕强在介绍自己公司时说&#xff0c;金航标成立于2007年&#xff0c;成立地点在华强北雷圳大厦803室&#xff0c;后搬到华强北广业大厦24楼CD室&#xff0c;后搬迁到龙华展滔科技大厦C座C809和C817室&#xff0c;现在的办公地址为龙岗区坂田街道百瑞达大厦&…

WSL安装USB驱动

wsl用不了USB盘&#xff0c;需要安装驱动 1、安装windows驱动 https://github.com/dorssel/usbipd-win/releases 下载msi&#xff0c;并且安装 2、linux里面安装 sudo apt install linux-tools-5.4.0-77-generic hwdata sudo update-alternatives --install /usr/local/bin/usb…

PageDTO<T>,PageQuery,BeanUtils,CollUtils的封装

一、PageDTO<T> import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fasterxml.jackson.annotation.JsonIgnore; import com.tianji.common.utils.BeanUtils; import com.tianji.common.utils.CollUtils; import com.tianji.common.utils.…

C#中的MD5摘要算法与哈希算法

文章目录 一、哈希算法基础二、MD5 算法原理三、MD5摘要算法四、哈希算法五、C#实现示例MD5算法示例哈希算法示例字符串MD5值对比 六、总结 一、哈希算法基础 哈希算法是一种单向密码体制&#xff0c;它将任意长度的数据转换成固定长度的字符串。这种转换是不可逆的&#xff0…

IDEA中配置代理,解决Codearts Snap登陆不了的问题

问题描述&#xff1a;在mac电脑中的idea中安装了华为的codearts snap插件&#xff0c;一直登录不了&#xff0c;账号是没问题的&#xff0c;后来我怀疑是我的代理有问题&#xff0c;找到IDEA中的代理设置先是有这个问题“You have JVM property "https.proxyHost" se…

千呼新零售2.0分销商城视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

C语言 将两个字符串连接起来,不用strcat函数

编一个程序,将两个字符串连接起来,不要用strcat函数。 #include <stdio.h>void my_strcat(char *s1, const char *s2) {while (*s1) {s1;}while (*s2) {*s1 *s2;s1;s2;}*s1 \0; }int main() {char s1[100] "Hello, ";char s2[] "World!";my_str…

Android初学者书籍推荐

书单 1.《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年出版2.《第一行代码Android》第二版3.《第一行代码Android》第三版4.《疯狂Android讲义》第四版5.《Android移动应用基础教程&#xff08;Android Studio 第2版&#xff09;》 从学安卓到用安…

uniapp 打包成安卓APP预览base64pdf实现方法

下载PDF.js 问题描述 在uniapp中预览base64的PDF&#xff0c;可以使用web-view组件嵌入一个PDF.js的实例。以下是一个简单的示例&#xff1a; 解决方案&#xff1a; 1.在页面的.vue文件中添加web-view组件&#xff1a; <template><view style"width: 50%;&qu…

【机器学习】支持向量机与主成分分析在机器学习中的应用

文章目录 一、支持向量机概述什么是支持向量机&#xff1f;超平面和支持向量大边距直觉 二、数据预处理与可视化数据集的基本信息导入必要的库加载数据集数据概况数据可视化特征对的散点图矩阵类别分布条形图平均面积与平均光滑度的散点图变量之间的相关性热图 三、模型训练&am…

JS【详解】类 class ( ES6 新增语法 )

本质上&#xff0c;类只是一种特殊的函数。 console.log(typeof 某类); //"function"声明类 class 方式 1 – 类声明 class Car {constructor(model, year) {this.model model;this.year year;} }方式 2 – 类表达式 匿名式 const Car class {constructor(mod…