小阿轩yx-NoSQL 之 Redis 配置与优化

小阿轩yx-NoSQL 之 Redis 配置与优化

Redis 数据库介绍

  • 是一个非关系型数据库

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

  • 按照数据库结构划分的
关系型数据库
  • 是一个结构化的数据库,创建在关系模型基础上,一般面向于记录
  • 借助集合代数等数学概念和方法处理数据库中的数据
  • SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行关系型数据库中数据的检索和操作

关系模型

  • 指二维表格模型,一个关系型数据库由二维表及其之间的联系组成的一个数据组织
  • 各种实体与实体之间的各种联系都可以用关系模型来表示

主流关系型数据库包括

  • Oracle
  • MySQL
  • SQL Server
  • Microsoft Access
  • DB2
非关系型数据库

NoSQL(NoSQL= Not Only SQL)

  • 意思“不仅是SQL”,是非关系型数据库的总称

主流的 NoSQL 数据库有

  • Redis
  • MongBD
  • Hbase
  • CouhDB等

这些非关系型数据库的存储方式、存储结构、使用场景都完全不同,所以被认为它是非关系型数据库的集合。

不像关系型数据库是一个统称

NoSQL 优势

  • 非关系型
  • 分布式
  • 开源
  • 横向扩展等
非关系型数据库产生背景
  • 随着 Web2.0网站的兴起,关系型数据库应对海量数据和高并发的 SNS (Social Networking Services,即社交网络服务)类型 Web2.0 网站纯动态网站暴露出很多难以解决的问题,例如:三高问题

High performance——对数据库高并发读写需求

  • Web2.0网站会根据用户个性化信息实时生成动态页面和提供动态信息,因此无法使用动态页面静态化技术。
  • 所以数据库的并发负载非常高,一般会达到 10000 次/s 以上的读写请求。
  • 关系型数据库可以勉强支撑上万次的查询请求,上万次的写数据请求,硬盘 IO 就已经无法承受了。对于普通的 BBS 网站,往往也会存在高并发的写数据请求。

High Scalability && High Availability——对数据库高可扩展性与高可用性需求

  • Web 架构中,数据库是最难进行横向扩展

关系型数据库和非关系型数据库都有各自的特点与应用场景,两者紧密结合会给Web2.0数据库发展带来新的思路

让关系数据库关注在关系上,非关系型数据库关注在存储上

Redis 基础

Redis 简介
  • Redis(RemoteDictionaryServer,远程字典型)是一个开源的、使用 C 语言编写的 NoSQL 数据库
  • Redis 基于内存运行并支持持久化,采用 key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环
  • Redis 服务器程序是单进程模型,一台服务器可同时启动多个 Redis 进程,实际处理速度则完全依靠主进程执行效率
Redis 几个优点
  • 具有极高的数据读写速度,数据读取的速度最高可达到 110000 次/s,数据写入速度最高可达到 81000 次/s。
  • 支持丰富的数据类型,不仅仅支持简单的 key-value 类型的数据,还支持 Strings, Lists.
  • Hashes,Sets 及 Ordered Sets 等数据类型操作。
  • 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • 原子性,Redis 所有操作都是原子性的。
  • 支持数据备份,即 master-salve 模式的数据备份。

Redis 基于内存运行的数据库,缓存是最常应用的场景之一

常见应用场景还包括

  • 获取最新 N 个数据的操作
  • 排行榜类应用
  • 计数器应用
  • 存储关系
  • 实时分析系统
  • 日志记录

Redis 安装部署

  • 官网链接下载源码包 https://www.redis.io
  • 然后上传至 XShell 解压、安装

关闭防火墙、内核机制

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

安装依赖包

[root@localhost ~]# yum -y install gcc* zlib-devel

解压

[root@localhost ~]# tar zxvf redis-4.0.9.tar.gz

进入 redis

[root@localhost ~]# cd redis-4.0.9/

make 执行

[root@localhost redis-4.0.9]# make

在make的时候,可能会出现如下错误提示:

  • 解决方法1:用make MALLOC=libc指定内存分配器为 libc进行编译

  • 解决方法2:make clean && make distclean

指定路径前缀

[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install

链接一下,装在bin下,所以链接的也是bin

[root@localhost ~]# ln -s /usr/local/redis/bin/* /usr/local/bin/

进入 redis 工具

[root@localhost redis-4.0.9]# cd /root/redis-4.0.9/utils/

启动服务

[root@localhost utils]# ./install_server.sh
  • Config file : /etc/redis/6379.conf    //配置文件路径

  • Log file : /var/log/redis_6379.log    //日志文件路径

  • Data dir : /var/lib/redis/6379    //数据文件路径

  • Executable : /usr/local/redis/bin/redis-server    //可执行文件路径

  • Cli Executable : /usr/local/redis/bin/redis-cli    //客户端命令行工具

查看进程

[root@localhost utils]# netstat -anpt | grep 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

修改配置参数

[root@localhost ~]#vim /etc/redis/6379.conf
//监听的主机地址 
bind 127.0.0.1 192.168.10.101
//端口 
port 6379
//启用守护进程 
daemonize yes
//指定 PID 文件 
pidfile /var/run/redis_6379.pid
//日志级别 
loglevel notice
//指定日志文件
logfile /var/log/redis_6379.log

Redis 主配置文件还包含很多其它配置参数

参数作用
timeout 300当客户端闲置多长时间后关闭连接,如果指定为0表示关闭该功能
dbfilename dump.rdb指定本地数据库文件名,默认值为 dump.rdb
dir /var/lib/redis/6379指定本地数据库存放目录
maxclients 10000设置同一时间最大客户端连接数,默认为10000。Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients0,表示不限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number oclients reached 错误信息
rdbcompression yes指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 资源,可以关闭该选项,但会导致数据库文件变的巨大
slaveof <masterip><masterport>当本机为从服务器时,设置主服务的IP地址及端口。在 Redis 启动时,从服务器会自动从主服务进行数据同步
masterauth <master-password>当主服务设置了密码保护时,从服务连接主服务的密码
requirepass foobared设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH<password>命令提供密码,默认关闭
maxmemory <bytes>指定 Redis 最大内存限制。Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新 VM 机制,会把 Key 存放内存,Value 会存放在 Swap 分区
appendonly no指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步地把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为Redis 本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为 no
appendfilename appendonly.aof指定更新日志文件名,默认为 appendonly.aof
appendfsync everysec指定更新日志条件,共有3个可选值:no:表示等操作系统进行数据缓存同步到磁盘(快)always:表示每次更新操作后手动调用 fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折衷,默认值)
activerehashing yes指定是否激活重置哈希,默认为开启
include /path/to/local.conf指定包含其它的配置文件,可以在同一主机上多个Redis 实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

重启服务

[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-cli 命令行工具

连接本机 redis

[root@localhost ~]# redis-cli
127.0.0.1:6379>

测试redis服务是否启动

127.0.0.1:6379> ping
PONG

 远程连接

[root@localhost ~]# redis-cli -h 192.168.10.101 -p 6379

获取帮助

  • help @<group>:获取<group>中的命令列表;

  • help <command>:获取某个命令的帮助;

  • help <tab>:获取可能帮助的主题列表。

help <tab>:获取可能帮助的主题列表。

输入help后,按下tab键

查看所有与 List 数据类型的相关命令

127.0.0.1:6379>help @list
查看 set 命令的命令帮助
127.0.0.1:6379>help set
测试工具
redis-benchmark

redis-benchmark

  • 官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

  • 基本测试语法为 redis-benchmark [option] [option value]

常用选项

  • -h:指定服务器主机名;

  • -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 连接并等待。

多数据库常用命令
多数据库间切换
127.0.0.1:6379[15]>select 0
  • Redis 在没有任何改动情况下默认包含 16 个数据库
  • 数据库名称是用数字 0-15 依次命名
切换至序号为 10 的数据库
127.0.0.1:6379>select 10 
OK
切换至序号为 15 的数据库
127.0.0.1:6379[10]>select 15 
OK
切换至序号为 0 的数据库
127.0.0.1:6379[15]>select 0
OK
多数据库间移动数据
  • Redis 多数据库在一定程度上是相对独立的
在数据库 0 上面存放 k1 的数据,在其它 1-15 的数据库上是无法查看到的
127.0.0.1:6379>set k1 100 
OK
127.0.0.1:6379>get k1 
"100" 
127.0.0.1:6379>select 1 
OK
127.0.0.1:6379[1]>get k1 
(nil) 

//切换至目标数据库 0 
127.0.0.1:6379[1]>select 0
OK
//查看目标数据是否存在 
127.0.0.1:6379>get k1
"100" 
//将数据库 0 中 k1 移动到数据库 1 中 
127.0.0.1:6379>move k1 1
(integer) 1 
//切换至目标数据库 1 
127.0.0.1:6379>select 1
OK
//查看被移动数据 
127.0.0.1:6379[1]>get k1
"100" 
127.0.0.1:6379[1]> select 0 
OK
//在数据库 0 中无法查看到 k1 的值 
127.0.0.1:6379> get k1
(nil)
清空数据库内数据

FLUSHDB

  • 清空当前数据库数据

FLUSHALL

  • 清空所有数据库的数据

Redis 命令工具

  • Redis 软件提供了多个命令工具。
  • 安装 Redis 服务时,所包含的软件工具会同时被安装到系统中,在系统中可以直接使用。

这些命令工具的作用

  • redis-server: 用于启动 Redis 的工具;
  • redis-benchmark:用于检测 Redis 在本机的运行效率;
  • redis-check-aof:修复 AOF 持久化文件;
  • redis-check-rdb:修复 RDB 持久化文件;
  • redis-cli: Redis 命令行工具。
redis-cli命令行工具
  • Redis 数据库系统也是一个典型的 C/S(客户端/服务器端)架构的应用,要访问 Redis数据库需要使用专门的客户端软件。
  • Redis 服务的客户端软件就是其自带的redis-ci 命令行工具。

执行 ping 命令可以检测 Redis 服务是否启动。

//连接本机 Redis 数据库
[root@localhost ~]# /usr/local/redis/bin/redis-cli
//检测redis 服务是否启动
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>

执行“exit”或“quit”命令即可返还原来的 Shell 环境

[root@localhost ~]#redis-cli -h 192.168.10.161 -p 6379
192.168.10.161:6379>info
# Server
redis version:4.0.9
redis git_sha1:00000000
redis_git_dirty:0
redis build id:7f55f2c1a630cbe5
//省略部分内容
192.168.10.161:6379>exit
[root@localhost ~]#

help 命令可以获取命令类型帮助

有三种获取命令方式

  • help @<group>:获取<group>中的命令列表;
  • help <command>:获取某个命令的帮助;
  • help <tab>:获取可能帮助的主题列表;
[root@localhost ~]#redis-cli
//查看所有与 List 数据类型的相关命令
127.0.0.1:6379>help @list
BLPOP key [key ...] timeout
    summary: Remove and get the first element in a list, or block until one is                                         
    availablesince:2.0.0

    BRPOP key [key ...] timeout
    summary: Remove and get the last element in a list, or block until one is available
    since: 2.0.0
    BRPOPLPUSH source destination timeout
//省略部分内容
//查看 set 命令的命令帮助
127.0.0.1:6379>help set
SET key value [EX seconds] [PX milliseconds] [NX|XX]
summary: Set the string value of a keysince: 1.0.0
group: string

Redis 持久化

  • Redis 是一种高级 key-value 数据库。
  • 它跟 Memcached 类似,不过数据可以持久化,而且支持的数据类型很丰富,有字符串、列表、集合和有序集合。
  • 支持在服务器端计算集合(difference)等,还支持多种排序功能。
  • Redis 也可以被看成是一个数据结构服务器
  • Redis 的所有数据都是保存在内存中,不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);
  • 也可以把每一次数据变化都写入到一个 append only file(aof)里面(这称为“全持久化模式”)。
  • Redis 数据存放在内存中,如果没有配置持久化,Redis 重启后数据就全丢失了。
  • 所以,需要开启 Redis 的持久化功能,将数据保存到磁盘上,当 Redis 重启后,可以从磁盘中恢复数据。

Redis 提供两种方式进行持久化

一种是 RDB 持久化(Redis DataBase)

  • 将 Reids在内存中的数据库记录定时 dump 到磁盘上的RDB持久化

另一种是 AOF持久化(append only file)

  • 将 Reids 的操作日志以追加的方式写入文件
RDB 和 AOF 的区别

RDB 持久化

系统默认采用 RDB 

把当前进程数据生成快照保存到硬盘的过程

触发 RDB 持久化过程分为

  • 手动触发
  • 自动触发

触发机制

手动触发分别对应

  • save命令
  • bgsave命令

save 命令

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

bgsave 命令

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

AOF 持久化

  • 以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录
RDB 和 AOF 的优缺点
RDB 优缺点

RDB 优点

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

RDB 缺点

  • 没办法做到实时持久化/秒级持久化。
  • bgsave 每次运行都有执行 fork 操作创建子进程,属于重量级操作,频繁执行成本过高
  • 文件使用特定二进制格式保存,Redis 版本演进过程中有多个格式的 RDB 版本,存在老版本 Redis 服务无法兼容新版 RDB 格式的问题
AOF 优缺点

AOF 优点

  • 可以带来更高的数据安全性,即数据持久性
  • 以独立日志的方式记录每次写命令,重启时再重新执行 AOF 文件中命令达到恢复数据的目的

Redis 提供了3种同步策略

  • 每秒同步
  • 每次修改同步
  • 不同步

主要作用

  • 解决了数据持久化的实时性,目前已经是 Redis 持久化的主流

AOF 缺点

  • 对于相同数量的数据集而言,AOF 文件通常要大于 RDB 文件。RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
  • 同步策略不同,AOF 在运行效率上往往会慢于RDB。

二者选择的标准

  • 牺牲一些性能,换取更高的缓存一致性(AOF)
  • 写入操作频繁时,不启用备份来换取更高的性能,待手动运行 save 时,再做备份

如果 redis 重启之后,需要加载一个持久化文件,优先会选择AOF文件

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

Redis 持久化配置

RDB 持久化配置

  • Redis 会将数据集的快照 dump 到 dump.rdb 文件中。
  • 也可以通过配置文件来修改 Redis 服务器 dump 快照的频率。

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

[root@localhost ~]# vim /etc/redis/6379.conf
  • 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行
AOF持久化配置
  • Redis 的配置文件中存在三种同步方式

它们分别是

  • appendfsync always:每次有数据修改发生时都会写入 AOF 文件
  • appendfsynceverysec:每秒钟同步一次,该策略为AOF 的缺省策略
  • appendfsyncno:从不同步,高效但是数据不会被持久化
AOF 重写
  • 解决 AOF 文件体积不断增大问题,用户可以向 Redis 发送 BGREWRITEAOF 命令

BGREWRITEAOF 命令

127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
  • 会通过移除 AOF 文件中的冗余命令来重写(rewrite)AOF 文件,使 AOF 文件的体积尽可能变小
  • 日志进行 BGREWRITEAOF 时,如果 no-appendfsync-on-rewrite 设置为 yes 表示新写操作不进行同步 fsync,只是暂存在缓冲去里,避免造成磁盘IO操作冲突,等重写完成后再写入。Redis 中默认为no
  • 当前 AOF 文件大小是上次日志重写时 AOF 文件大小两倍时,发生 BGREWRITEAOF 操作 auto-aof-rewrite-percentage 100

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

  • 当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF
  • auto-aof-rewrite-min-size 64mb

BGREWRITEAOF 工作原理

  • 和 BGSAVE 创建快照的工作原理非常相似
  • Redis 会创建一个子进程,然后由子进程负责对  AOF 文件进行重写

性能管理

Redis 性能管理需要关注的数据指标有

  • 内存使用率
  • 内存碎片率
  • 回收 key 等

查看内存信息

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

回收策略

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 实例的资源性能是非常重要的。
  • 内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低,也说明Redis 没有发生内存交换。
  • 如果内存碎片率超过 1.5,那就说明 Redis 消耗了实际需要物理内存的 150%,其中 50%是内存碎片率。
  • 若是内存碎片率低于1的话,说明Redis 内存分配超出了物理内存,操作系统正在进行内存交换。内存交换会引起非常明显的响应延迟。
  • 若生产环境内存碎片率过高,会导致Redis 性能降低。

解决常见方案有三种

内存碎片率超过 1.5

  • 重启 Redis 服务器可以让额外产生的内存碎片失效并重新作为新内存来使用,使操作系统恢复高效的内存管理。

如果内存碎片率低于1

  • Redis 实例可能会把部分数据交换到硬盘上。

内存交换会严重影响 Redis 的性能,所以应该增加可用物理内存或减少 Redis 内存占用。

修改内存分配

  • Redis 支持 libc、jemaloc11、tcmalloc 三种不同的内存分配器,每个分配器在内存分配和碎片上都有不同的实现。

不建议运维人员修改Redis 默认内存分配器,因为这需要完全理解这几种内存分配器的差异,也要重新编译 Redis。

内存使用率
  • 是 Redis 服务最关键的一部分
  • used memory 字段数据表示的是由 Redis 分配器分配的内存总量,以字节为单位。
  • used_memory 是 Redis 使用的内存总量,它包含了实际缓存占用的内存和 Redis 自身运行所占用的内存(如元数据、lua)。
  • Redis 默认最大使用内存是可用物理内存剩余的所有内存,0代表没有限制。
  • 在硬盘上进行读写操作要比在内存上进行读写操作慢很多。
  • 如果 Redis 进程上发生内存交换,那么 Redis 和依赖 Redis 上数据的应用会受到严重的性能影响。
避免内存交换发生有三点

针对缓存数据大小选择

  • 如果缓存数据小于 4GB,就使用 32 位的 Redis 实例。

使用 Hash 数据结构

  • Redis 在储存小于 100 个字段的 Hash 结构上,存储效率是非常高。

设置 key 的过期时间

  • 减少内存使用率的简单方法,存储对象时确保设置 key 的过期时间。

回收 key

  • 内存使用达到设置的最大阀值时,需要选择一种 key 的回收策略,可在 redis.conf配置文件中修改“maxmemory-policy"属性值。
  • 默认情况下回收策略是禁止删除

Redis 还提供了一些其它淘汰策略

  • volatile-lru:使用 LRU 算法从已设置过期时间的数据集合中淘汰数据;
  • volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰;
  • volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰;
  • allkeys-lru:使用 LRU 算法从所有数据集合中淘汰数据;
  • allkeys-random:从数据集合中任意选择数据淘汰;
  • no-enviction:禁止淘汰数据。
  • info stats 信息中的 evicted keys 字段显示的是因为 maxmemory 限制导致 key 被回收删除的数量。

Redis内存压力需要回收一个 key,不是回收最旧的,而是最近最少使用后者即将过期的。

从数据库中删除

192.168.9.236:7001>info stats

回收key 对性能的影响远没有内存交换严重,若是在强制内存交换和设置回收策略做一个选择的话,则放弃强制内存交换是比较合理的,因为把内存数据交换到硬盘上对性能影响非常大。

另外一种分片技术是把数据分割成合适大小,分别存放在不同的Redis 实例上,每一个实例都包含整个数据集的一部分。

Redis 设置密码

设置方法一

  • 通过配置文件 redis.conf 设置密码

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

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

方法二

  • 通过命令设置密码

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

config set requirepass 123456

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

连接方法

连接时输入密码

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

先连接再输入密码

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

关闭方法

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

区别

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

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

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

小阿轩yx-NoSQL 之 Redis 配置与优化

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

边缘计算网关:一种高效安全的工业物联网解决方案-天拓四方

在工业物联网&#xff08;IIoT&#xff09;领域&#xff0c;数据处理和实时响应的需求日益增长&#xff0c;尤其是在智能制造、远程监控和预测性维护等场景中。边缘计算网关作为一种前端数据处理和决策设备&#xff0c;正逐渐成为满足这些需求的理想解决方案。 在一个大型制造…

音频语言学习领域数据集现状、分类及评估

Audio Language Learning (Audio-Text Learning) 是一个新兴的研究领域&#xff0c;专注于处理、理解和描述声音。它的发展动力是机器学习技术的进步以及越来越多地将声音与其相应的文本描述相结合的数据集的可用性。 Audio Language Models (ALMs) 是这个领域的关键技术&#…

部署大语言模型并对话

在阿里云的https://developer.aliyun.com/adc/scenario/b105013328814fe995c0f091d708d67d 选择函数计算 设置服务器配置 复制公网地址 这个地址不能直接 在返回应用&#xff0c;创建应用LLM 对话页面 Open WebUI 点击下面的创建应用 部署完成后访问域名 打开访问地址

欧科云链研究院:坎昆升级后,Layer2变得更好了吗?

本文由欧科云链研究院OKG Research联合PANews出品&#xff1a;以数据为导向&#xff0c;洞察真实的链上世界。 作者&#xff5c;Jason Jiang, OKG Research 坎昆升级后&#xff0c;以太坊L2的交易费用降低明显且吞吐量有所提升&#xff0c;但整体生态并没有迎来想象中的繁荣景…

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)

项目简介&#xff1a; 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践&#xff0c;并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…

【漏洞复现】Splunk Enterprise for Windows 任意文件读取漏洞 CVE-2024-36991

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 Splunk Enterprise 是一款强大的机器数据管理和分析平台&#xff0c;广泛应用于企业中&#xff0c;用于实…

应用最优化方法及MATLAB实现——第3章代码实现

一、概述 在阅读最优方法及MATLAB实现后&#xff0c;想着将书中提供的代码自己手敲一遍&#xff0c;来提高自己对书中内容理解程度&#xff0c;巩固一下。 这部分内容主要针对第3章的内容&#xff0c;将其所有代码实现均手敲一遍&#xff0c;中间部分代码自己根据其公式有些许的…

百度安全大模型智能体实践入选信通院“安全守卫者计划”优秀案例

7月3日&#xff0c;由全球数字经济大会组委会主办&#xff0c;中国信息通信研究院&#xff08;以下简称中国信通院&#xff09;与中国通信标准化协会联合承办的2024全球数字经济大会“云和软件安全论坛暨第二届SecGo云和软件安全大会”在北京召开。本届论坛聚焦云和软件安全最新…

从基础到进阶:无线局域网技术解析

在局域网刚刚问世后的一段时间内&#xff0c;无线局域网的发展比较缓慢&#xff0c;其原因是价格贵、数据传输速率低、安全性较差。但自20世纪80年代末以来&#xff0c;由于人们工作和生活节奏的加快&#xff0c;以及移动通信技术的飞速发展&#xff0c;无线局域网逐步进入市场…

今年2024,而那一年是1984

那一年&#xff0c;是1984 对于经历了改革开放洪流的国人来说&#xff0c;1984年似乎没有什么特别。 可是这一年&#xff0c;又确确实实非同寻常&#xff0c;许多后来的巨大变迁&#xff0c;在这一年埋下了伏笔…… 文学创作: 余华、莫言等作家在这一年迎来了自己的创作高峰…

学习通er图和项目思路

ER图 项目构思&#xff1a; 用户功能&#xff1a; 主要功能逻辑&#xff1a;

Web3知识图谱,一篇读完

这张图展示了区块链生态系统的架构和主要组件。以下是对图中内容的概括总结&#xff1a; 基础层&#xff1a; 底层基础设施&#xff1a;包括光纤网络、P2P网络、非对称加密、哈希算法、默克尔树和随机数生成。共识机制&#xff1a; PoW&#xff08;工作量证明&#xff09;: 比特…

Elasticsearch:介绍 retrievers - 搜索一切事物

作者&#xff1a;来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中&#xff0c;Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率&#xff0c;以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…

MyBatis框架学习笔记(三):MyBatis重要文件详解:配置文件与映射文件

1 mybatis-config.xml-配置文件详解 1.1 说明 &#xff08;1&#xff09;mybatis 的核心配置文件(mybatis-config.xml)&#xff0c;比如配置 jdbc 连接信息&#xff0c;注册 mapper 等等都是在这个文件中进行配置,我们需要对这个配置文件有详细的了解 &#xff08;2&#x…

如何做好漏洞扫描工作提高网络安全

在数字化浪潮席卷全球的今天&#xff0c;企业数字化转型已成为提升竞争力、实现可持续发展的关键路径。然而&#xff0c;这一转型过程并非坦途&#xff0c;其中网络安全问题如同暗礁般潜伏&#xff0c;稍有不慎便可能引发数据泄露、服务中断乃至品牌信誉受损等严重后果。因此&a…

【Linux】磁盘性能压测-FIO工具

一、FIO工具介绍 fio&#xff08;Flexible I/O Tester&#xff09;是一个用于评估计算机系统中 I/O 性能的强大工具。 官网&#xff1a;fio - fio - Flexible IO Tester 注意事项&#xff01; 1、不要指定文件系统名称&#xff08;如/dev/mapper/centos-root)&#xff0c;避…

socket编程(2) -- TCP通信

TCP通信 2. 使用 Socket 进行TCP通信2.1 socket相关函数介绍socket()bind()listen()accept()connect()2.2 TCP协议 C/S 模型基础通信代码 最后 2. 使用 Socket 进行TCP通信 Socket通信流程图如下&#xff1a; 这里服务器段listen是监听socket套接字的监听文件描述符。如果客户…

Excel第30享:基于辅助列的条件求和

1、需求描述 如下图所示&#xff0c;现要统计2022年YTD&#xff08;Year To Date&#xff1a;年初至今日&#xff09;各个人员的“上班工时&#xff08;a2&#xff09;”。 下图为系统直接导出的工时数据明细样例。 2、解决思路 Step1&#xff1a;确定逻辑。“从日期中提取出…

[spring] Spring MVC - security(上)

[spring] Spring MVC - security&#xff08;上&#xff09; 这部分的内容基本上和 [spring] rest api security 是重合的&#xff0c;主要就是添加 验证&#xff08;authentication&#xff09;和授权&#xff08;authorization&#xff09;这两个功能 即&#xff1a; 用户…

构造函数的初始化列表,static成员,友元,内部类【类和对象(下)】

P. S.&#xff1a;以下代码均在VS2022环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …