小阿轩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 ...] timeoutsummary: Remove and get the first element in a list, or block until one is                                         availablesince:2.0.0BRPOP key [key ...] timeoutsummary: Remove and get the last element in a list, or block until one is availablesince: 2.0.0BRPOPLPUSH 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.mzph.cn/pingmian/45194.shtml

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

相关文章

215.Mit6.S081-实验三-page tables

在本实验室中&#xff0c;您将探索页表并对其进行修改&#xff0c;以简化将数据从用户空间复制到内核空间的函数。 一、实验准备 开始编码之前&#xff0c;请阅读xv6手册的第3章和相关文件&#xff1a; kernel/memlayout.h&#xff0c;它捕获了内存的布局。kernel/vm.c&…

Python:Python基础知识(注释、命名、数据类型、运算符)

.注释 Python有两种注释方法&#xff1a;单行注释和多行注释。单行注释以#开头&#xff0c;多行注释以三个单引号 或三个双引号 """ 开头和结尾。 2.命名规则 命名规则: 大小写字母、数字、下划线和汉字等字符及组合&#xff1b; 注意事项: 大小写敏感、首…

Linux环境下Oracle 11g的离线安装与配置历程

在成功体验了 Windows 版本的Oracle 11g 后&#xff0c;这几天心血来潮&#xff0c;决定再挑战一下Linux 环境下的安装&#xff0c;特别是在考虑到部门内部虚拟机无法联网的情况下&#xff0c;我选择了在CentOS 7上进行离线安装。这次安装之旅&#xff0c;主要参考了下面大佬的…

【计算机科学】CCF-C特刊征稿合集,见刊快,期刊质量高,速投!

期刊推荐 期刊名称&#xff1a;ACTA INFORMATICA 主题包括以下项目的理论方面。 算法及其分析 自动机和形式语言 可计算性和复杂性 数据处理 离散数学 逻辑学&#xff08;计算机科学&#xff09; 人工智能的数学基础 编程语言理论 安全 系统理论 验证 中科院四区 …

STM32智能物流机器人系统教程

目录 引言环境准备智能物流机器人系统基础代码实现&#xff1a;实现智能物流机器人系统 4.1 数据采集模块 4.2 数据处理与导航算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;物流机器人管理与优化问题解决方案与优化收尾与总结 1. 引言 智能物流…

mindspore打卡23天之微调本地MindNLP ChatGLM-6B StreamChat

MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 1 环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !p…

基于JavaSpringBoot+Vue+uniapp微信小程序校园宿舍管理系统设计与实现(7000字论文参考+源码+LW+部署讲解)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

Linux:NFS共享存储

目录 一、NFS基本概述 二、NFS共享文件实验 2.1、安装nfs和rpcbind软件 2.2、修改配置文件设置共享 2.3、创建共享目录 ​编辑 2.4、开启服务 2.5、客户端验证共享目录可访问 三、tcpdump命令 3.1、概述 3.2、简单表达 3.3、过滤规则 ​编辑 3.4、tcpdump常见参数…

强化学习实战2:动手写迷宫环境

迷宫环境介绍与创建 迷宫环境图示如下&#xff1a; 如图所示&#xff0c;其为一个 三乘三 的网格世界&#xff0c;我们要让 agent 从 S0 采取策略出发&#xff0c;然后走到 S8&#xff0c;图中红线部分表示障碍不能逾越&#xff0c;其中 S1 和 S4 之间有一个障碍&#xff0c;S…

C语言有哪些特点?

C语言是一种结构化语言&#xff0c;它有着清晰的层次&#xff0c;可按照模块的方式对程序进行编写&#xff0c;十分有利于程序的调试&#xff0c;且c语言的处理和表现能力都非常的强大&#xff0c;依靠非常全面的运算符和多样的数据类型&#xff0c;可以轻易完成各种数据结构的…

Kotlin MultiPlatform(KMP)

Kotlin MultiPlatform 1.KMP 是什么 Kotlin Multiplatform 是一个工具&#xff0c;它让我们用同一种编程语言&#xff08;Kotlin&#xff09;写代码&#xff0c;这些代码可以同时在不同的设备上运行&#xff0c;比如手机、电脑和网页。这样做可以节省时间&#xff0c;因为你不…

1、项目目录设计

文章目录 前言一、项目目录设计 前言 本项目我们将会完成一个Go项目开发框架&#xff0c;该项目不会包含具体的CRUD业务代码&#xff0c;而是从头搭建一个工作中实用的开发框架。让开发者能够熟悉整个项目的搭建流程&#xff0c;能够独立完成项目从0到1的搭建&#xff0c;而且…

【RHCE】实验(HTTP,DNS,SELinux,firewalld的运用)

一、题目 二、主服务器配置 1.下载HTTP服务&#xff0c;DNS服务 [rootlocalhost ~]# yum install -y httpd bind 2.开启防火墙&#xff0c;放行服务 # 开启防火墙 [rootlocalhost ~]# systemctl start firewalld # 放行服务 [rootlocalhost ~]# firewall-cmd --add-service…

上班摸鱼吗?一文详解代码生成神器-Velocity

引言 “我不是在教你学坏,而是教你如何提高生产效率。” ----------- 牛顿 人类社会能够一直进步发展出现在的文明世界,最大的一个原因就是这个世界上懒人居多,懒人为了偷懒就需要提高生产效率,效率提高节省下来的时间才能创造出艺术、娱乐以及更高效率的科学技术。程序员…

MySQL DDL

数据库 1 创建数据库 CREATE DATABASE 数据库名 CREATE DATABASE IF NOT EXISTS 数据库名;&#xff08;判断是否存在) CREATE DATABASE 数据库名 CHARACTER SET 字符 2 查看数据库 SHOW DATABASES; 查看某个数据库的信息 SHOW CAEATE DATABASE 数据库名 3 修改数据库 …

信息学奥赛初赛天天练-44-CSP-J2020基础题-排列组合、乘法原理、捆绑法、隔板法、排除法示例及应用

PDF文档公众号回复关键字:20240711 2020 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 10.有5 个小朋友并排站成一列&#xff0c;其中有两个小朋友是双胞胎&#xff0c;如果要求这…

dev小熊猫,clion设置模版教程

首先点击工具 然后进入设置 &#xff0c;找到代码模版 然后点击c模版&#xff0c;进入之后直接输入模版之后&#xff0c;&#xff08;还没有结束&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;先点击应用&#xff0c;然后是确定&#xff01;&#xff01;&#…

【js面试题】深入理解浏览器对象模型(BOM)

面试题&#xff1a;请你说说对bom的理解&#xff0c;常见的bom对象你了解哪些 引言&#xff1a; 浏览器对象模型&#xff08;BOM&#xff09;是JavaScript中用于与浏览器窗口及其内容进行交互的一组对象和方法。 BOM的核心是window对象&#xff0c;它代表了浏览器窗口本身&…

【SQL】DML、DDL、ROLLBACK 、COMMIT详解

DML DML&#xff08;Data Manipulation Language&#xff09;数据操作语言&#xff0c;是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统&#xff08;DBMS&#xff09;中的一个重要部分&#xff0c;它允许用户或应用程序对数据库中的数据进行增、删、改…

探索GitHub上的两个革命性开源项目

在数字世界中,总有一些项目能够以其创新性和实用性脱颖而出,吸引全球开发者的目光。今天,我们将深入探索GitHub上的两个令人惊叹的开源项目:Comic Translate和GPTPDF,它们不仅改变了我们处理信息的方式,还极大地丰富了我们的数字生活体验。 01 漫画爱好者的福音:Comi…