数据库-----Redis理论+配置+优化

文章目录

        • 前言:
        • 一、数据库两大类型介绍
          • 1.1 关系型数据库(SQL)
          • 1.2 非关系型数据库(NoSQL)
          • 1.3 非关系型数据库产生背景
        • 二、Redis简介
          • 2.1 Redis概述
          • 2.2 Redis优缺点
          • 2.3 Redis 和Memcache比较
        • 三、redis安装、部署
          • 3.1 实验环境
          • 3.2 实验过程
            • 3.2.1 redis 安装
          • 3.3 Redis 常用命令
            • 3.3.1 查询命令
            • 3.3.2 存放数据命令
            • 3.3.3 Redis多数据库操作
        • 四、redis-benchmark工具
        • 五、Redis 持久化
          • 5.1 Redis持久化概述
          • 5.2 Redis持久化分类
            • 5.2.1 RDB持久化
            • 5.2.2 AOF持久化
        • 六、Redis 性能管理
          • 6.1 内存碎片率
          • 6.2 内存使用率
          • 6.3 回收 Key
        • 总结

前言:

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

一、数据库两大类型介绍

  • 数据库分为关系型数据库(SQL)和非关系型数据库(NoSQL)
1.1 关系型数据库(SQL)
  • 关系型数据库:是指采用了关系模型赖组织数据的数据库,以其行和列的形式存储数据,以便用户理解,关系型数据库这一系列的行和列被称为表,多组表组成了库。一般面向于记录

  • 属于关系型数据的有:Oracle、Mysql、SQL Server、Microsoft Access、DB2等等。

  • 优点

    ① 易于维护:都是使用表结构,格式一致

    ② 使用方便:SQL语言通用,可用于复杂查询

    ③ 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询

  • 缺点

    ① 读写性能比较差,尤其是海量数据的高效率读写

    ② 固定的表结构,灵活度稍欠

    ③ 对于高并发读写的需求,传统关系型数据库节点的硬盘I/O是一个很大的瓶颈

1.2 非关系型数据库(NoSQL)
  • 非关系型数据库:“Not Only SQL” ,“不仅仅是SQL”,这是对非关系型数据库的总称。

  • 属于非关系型数据库的有:Redis、MongDb、Hbase、CouhDB、Memcache等

  • 非关系型数据库严格意义上不是一种数据库,应该属于一种数据结构化存储方式的集合,可以是文档类型、图形类型、列存储类型,键值对等

  • 优点

    ① 格式灵活:存储数据的格式可以是以 key-value(键-值)的形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型

    ② 速度快:NoSQL可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;

    ③ 高可扩展性

    ④ 成本低,NoSQL数据库部署简单,基本都是开源软件

  • 缺点

    ① 不提供SQL支持,学习和使用成本较高;

    ② 不支持事务,容错率低

    ③ 数据结构相对复杂,复杂查询方面稍欠

1.3 非关系型数据库产生背景
  • ① High performance----对数据库高并发读写需求
  • ② Huge Storage----对海量数据高效存储与访问需求
  • ③ High Scalability && High Availability----对数据高可扩展性与高可用性需求

二、Redis简介

2.1 Redis概述
  • Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制,lua脚本,LRU,事务等功能,通过redis sentinel实现高可用,通过redis cluster实现了自动分片。以及事务,发布/订阅,自动故障转移等等。

  • 简单的说

    redis是一个完全开源免费的key-value内存数据库

    通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets

2.2 Redis优缺点
  • Redis 优点

    具有极高的数据读写速度

    支持丰富的数据类型

    支持数据的持久化

    原子性

    支持数据备份

  • Redis 缺点

    数据容量收到物理内存的限制,不能用于海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上

2.3 Redis 和Memcache比较
  • ① 存储方式

    memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小

    redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。

  • ② 数据支持类型

    redis在数据支持上要比memecache多的多

  • ③ 使用底层模型不同

    新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

  • ④ 运行环境不同

    redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上

  • ⑤ value大小

    redis最大可以达到1G

    memcache只有1M

  • redis 相比memcached 的优势

    • memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型;
    • redis的速度比memcached快很多;
    • redis可以持久化其数据;
    • Memcache 支持结构化,但是 Redis支持结构化和非结构化。

三、redis安装、部署

3.1 实验环境
  • 使用centos系统
  • 下载redis-5.0.7软件包,地址:https://redis.io/
3.2 实验过程
3.2.1 redis 安装
  • ① 安装编译工具
[root@localhost ~]# yum install gcc gcc-c++ make -y
  • ② 下载共享文件中的redis软件包、解压
[root@localhost ~]# mount.cifs //192.168.226.1/LAMP-C7 /mnt
Password for root@//192.168.226.1/LAMP-C7:  
[root@localhost ~]# cd /mnt/redis
[root@localhost redis]# tar xzvf redis-5.0.7.tar.gz -C /opt
......省略部分内容
  • ③ make && make install

    因为解压的软件中的配置脚本已经被封装化了,所以直接make即可

[root@localhost redis]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# ls
00-RELEASENOTES  deps       README.md        runtest-moduleapi  tests
BUGS             INSTALL    redis.conf       runtest-sentinel   utils
CONTRIBUTING     Makefile   runtest          sentinel.conf
COPYING          MANIFESTO  runtest-cluster  src
[root@localhost redis-5.0.7]# make
......省略部分内容

#make install 需要指定安装路径(命令文件存放位置)    
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install
......省略部分内容
  • ④ 创建软链接,便于系统管理
[root@localhost redis-5.0.7]# ln -s /usr/local/redis/bin/* /usr/local/bin/
  • ⑤ 执行安装脚本,查看端口号
[root@localhost ~]# /opt/redis-5.0.7/utils/install_server.sh 
  • 只有扩展服务目录位置需要手动修改,其他全部执行回车即可。如下:
    数据库-----Redis理论+配置+优化_第1张图片

  • 可查看配置文件

[root@localhost redis]# cd /etc/redis/
[root@localhost redis]# ls
6379.conf
  • 查看端口
[root@localhost redis]# netstat -natp | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      7221/redis-server 1 
  • ⑥ 我们可以使用redis_6379来控制服务状态
[root@localhost redis]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@localhost redis]# netstat -natp | grep 6379
tcp        0      0 127.0.0.1:6379          127.0.0.1:39690         TIME_WAIT   -                   
[root@localhost redis]# netstat -natp | grep 6379
tcp        0      0 127.0.0.1:6379          127.0.0.1:39690         TIME_WAIT   -                   
[root@localhost redis]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@localhost redis]# netstat -natp | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      7478/redis-server 1 
tcp        0      0 127.0.0.1:6379          127.0.0.1:39690         TIME_WAIT   -                   
[root@localhost redis]# netstat -natp | grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      7478/redis-server 1 
tcp        0      0 127.0.0.1:6379          127.0.0.1:39690         TIME_WAIT   -                   
[root@localhost redis]# 
  • ⑦ 修改配置文件,添加主机IP地址
[root@localhost redis]# vim /etc/redis/6379.conf 
#70行,在监听地址的IP中添加本地IP 192.168.226.128
bind 127.0.0.1 192.168.226.128
----》wq
  • ⑧ 使用远程连接测试
[root@localhost redis]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost redis]# redis-cli -h 192.168.226.128 -p 6379
192.168.226.128:6379> 
#需要在配置文件中添加监听地址,否则会显示无法连接
3.3 Redis 常用命令
3.3.1 查询命令
#查看主列表的帮助信息
192.168.226.128: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

  BRPOP key [key ...] timeout
  summary: Remove and get the last element in a list, or block until one is available
  since: 2.0.0
....省略部分内容

    
#查看set信息    
192.168.226.128: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
    
#自动提示功能:输入“set”  之后会有提示信息
192.168.226.128:6379> set key value [expiration EX seconds|PX millisecond

#创建set、查询keys和匹配exists
192.168.226.128:6379> set teacher zhangsan
OK
192.168.226.128:6379> set tea red
OK
192.168.226.128:6379> keys *
1) "tea"
2) "teacher"
192.168.226.128:6379> keys t??
1) "tea"
192.168.226.128:6379> get tea
"red"
192.168.226.128:6379> exists tea
(integer) 1
192.168.226.128:6379> exists teas
(integer) 0
3.3.2 存放数据命令
  • ① Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型

    基本语法:SET KEY_NAME VALUE

    示例

192.168.226.128:6379> set teacher zhangsan		#设定键--值
OK												#返回值
192.168.226.128:6379> get teacher				#查看/获取键--值
"zhangsan"
192.168.226.128:6379> set teacher changzhi		#覆盖值
OK
192.168.226.128:6379> get teacher
"changzhi"
  • 返回值 :OK

    在 Redis 2.6.12 以前版本, SET 命令总是返回 OK 。

    从 Redis 2.6.12 版本开始, SET 在设置操作成功完成时,才返回 OK 。

  • ② Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。

    基本语法:GET KEY_NAME

    示例

192.168.226.128:6379> set teacher changzhi		#覆盖值
OK
192.168.226.128:6379> get teacher
"changzhi"
  • ③ Redis Get 命令用于获取指定 key 的值。
  • 基本语法:GET KEY_NAME
  • 返回值:返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误。
192.168.226.128:6379> keys *			#查看当前数据库中所有的键
1) "tea"
2) "teacher"
192.168.226.128:6379> keys t*			#查看当前数据库中以t开头的键
1) "tea"
2) "teacher"
192.168.226.128:6379> keys v?			#查看当前数据库中以t开头后面包含任意一个字符的键. 一个"?"代表任意一个字符
(empty list or set)
192.168.226.128:6379> keys t??
1) "tea"
  • ④ exists:判断键值是否存在
  • 基本语法:EXISTS KEY_NAME
  • 返回值:若 key 存在返回 1 ,否则返回 0
192.168.226.128:6379> exists tea
(integer) 1								
192.168.226.128:6379> exists t
(integer) 0
  • ⑤ Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。
  • 基本语法:DEL KEY_NAME
  • 返回值:被删除key的数量
192.168.226.128:6379> exists tea
(integer) 1
192.168.226.128:6379> del tea			#删除tea这个键
(integer) 1
192.168.226.128:6379> exists tea
(integer) 0
  • ⑥ Redis Type 命令用于返回 key 所储存的值的类型。

  • 基本语法:TYPE KEY_NAME

  • 返回值:返回key的数据类型,数据类型包括:

    none (key不存在)

    string (字符串)

    list (列表)

    set (集合)

    zset (有序集)

    hash (哈希表)

192.168.226.128:6379> type teacher
string
  • ⑦ rename与renamenx

  • Redis Rename 命令用于修改 key 的名称

    • 基本语法:RENAME OLD_KEY_NAME NEW_KEY_NAME

    • 返回值

      改名成功时提示 OK ,失败时候返回一个错误

      当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误

      NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。

  • Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。

    • 基本语法:RENAMENX OLD_KEY_NAME NEW_KEY_NAME
    • 返回值:修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0
#rename示例
192.168.226.128:6379> type teacher
string
192.168.226.128:6379> set school new
OK
192.168.226.128:6379> rename school work
OK
192.168.226.128:6379> exists school
(integer) 0
192.168.226.128:6379> exists work
(integer) 1


#renamenx示例
192.168.226.128:6379> set boys trouble
OK
192.168.226.128:6379> exists girls
(integer) 0
192.168.226.128:6379> renamenx boys girls
(integer) 1
  • ⑧ Redis Dbsize 命令用于返回当前数据库的 key 的数量。
  • 基本语法:DBSIZE
  • 返回值:当前数据库的 key 的数量
192.168.226.128:6379> dbsize
(integer) 3
3.3.3 Redis多数据库操作
  • Redis 支持多数据库,默认支持16个数据库,分别为0-15(命名)。
  • 多数据库之间相互独立,互不干扰
  • 多数据库常用命令如下
  • ① Redis Select 命令用于切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。
  • 基本语法:SELECT index
  • 返回值:0-15返回 OK ,切换到的数据库超过15,则返回error
192.168.226.128:6379> select 10
OK
192.168.226.128:6379[10]> select 11
OK
192.168.226.128:6379[11]> select 19
(error) ERR DB index is out of range
  • ② Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。
  • 基本语法:MOVE KEY_NAME DESTINATION_DATABASE
  • 返回值:移动成功返回 1 ,失败则返回 0 。
192.168.226.128:6379> keys *
1) "girls"
2) "teacher"
3) "work"
192.168.226.128:6379> move work 1		#将work键移动到数据库1中
(integer) 1								#成功
192.168.226.128:6379> keys *			#已移出数据库0
1) "girls"
2) "teacher"
192.168.226.128:6379> set work money	#重新设定work键-值
OK
192.168.226.128:6379> keys *
1) "girls"
2) "teacher"
3) "work"
192.168.226.128:6379> move work 1		#再次移动work到数据库1
(integer) 0								#失败,因为数据库1中已有同名的键
  • ③ Redis Flushdb 命令用于清空当前数
  • **据库中的所有 key。 **
  • 基础语法:FLUSHDB
  • 返回值:总是返回 OK
192.168.226.128:6379> keys *
1) "girls"
2) "teacher"
3) "work"
192.168.226.128:6379> flushdb
OK
192.168.226.128:6379> keys *
(empty list or set)

四、redis-benchmark工具

  • Redis 性能测试是通过同时执行多个命令实现的

  • 基本语法:redis-benchmark [option] [option value]

  • 需注意:测试命令是在redis 的目录下执行的,而不是redis客户端的内部指令

  • redis 性能测试工具可选参数如下所示
    数据库-----Redis理论+配置+优化_第2张图片

  • 测试示例

#该压测会把每一项功能进行测试
[root@localhost redis]# redis-benchmark -h 192.168.226.128 -p 6379 -c 100 -n 100000
====== MSET (10 keys) ======
  100000 requests completed in 1.23 seconds		#10万请求完成花费时间
  100 parallel clients
  3 bytes payload
  keep alive: 1

70.06% <= 1 milliseconds
99.11% <= 2 milliseconds
99.20% <= 3 milliseconds
99.27% <= 4 milliseconds
99.30% <= 7 milliseconds
99.34% <= 8 milliseconds
99.93% <= 9 milliseconds
100.00% <= 9 milliseconds
81566.07 requests per second
#还可以查看最典型的set和get所花费的时间

#测试存取大小为100字节的数据包的性能    
[root@localhost redis]# redis-benchmark -h 192.168.226.128 -p 6379 -q -d 100
PING_INLINE: 98814.23 requests per second
PING_BULK: 90744.10 requests per second
SET: 91575.09 requests per second
GET: 93896.71 requests per second
INCR: 96899.23 requests per second
LPUSH: 90090.09 requests per second
RPUSH: 89445.44 requests per second
LPOP: 90991.81 requests per second
RPOP: 92421.44 requests per second
SADD: 95510.98 requests per second
HSET: 94428.70 requests per second
SPOP: 96899.23 requests per second
LPUSH (needed to benchmark LRANGE): 80645.16 requests per second
LRANGE_100 (first 100 elements): 39824.77 requests per second
LRANGE_300 (first 300 elements): 12400.79 requests per second
LRANGE_500 (first 450 elements): 8130.74 requests per second
LRANGE_600 (first 600 elements): 6084.58 requests per second
MSET (10 keys): 74738.41 requests per second
#此处可以看到处理数据包所花费的时间,我们也可以进行内存优化,之后会进行讲述

五、Redis 持久化

5.1 Redis持久化概述
  • Redis 是运行在内存中,内存中的数据断电就会丢失
  • Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,为了能重用 Redis 数据,或者防止系统故障,需要将 Redis 中的数据写入到磁盘空间中,即持久化。
5.2 Redis持久化分类
  • ① RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
  • ② AOF 方式:将执行的写命令写道文件末尾,以日志的方式来记录数据的变化
5.2.1 RDB持久化
  • RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发自动触发

  • 触发条件

    ① 在指定的时间间隔内,执行指定次数的写操作(在配置文件中设置)

    ② 执行save 或者 bgsavfe(异步)命令

    • save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用
    • bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短

    ③ 执行flushall命令,清除数据库所有数据

    ④ 执行shutdown命令,保证服务器正常关闭且部丢失任何数据

  • 优缺点

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

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

  • 配置文件项

[root@localhost redis]# vim /etc/redis/6379.conf 
#219-221行
save 900 1
save 300 10
save 60 10000
#900秒内做1次写的操作 自动进行保存
#300秒内做10次写的操作 自动保存
#60秒内做10000次写的操作 自动保存

#254行,数据保存的目录命:dump.rdb
dbfilename dump.rdb

#264 目录路径
dir /var/lib/redis/6379
    
#242 压缩功能默认也是开启的
rdbcompression yes
5.2.2 AOF持久化
  • AOF文件本之上是一个redo log(重做日志) Redis 默认是不开启AOF的
  • 弥补 RDB 的不足(数据的不一致性);
  • 采用日志的形式来记录每个写操作,并追加到文件中;
  • Redis 重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
  • 开启AOF功能需要设置通过配置文件:appendonly.aof中的appendonly yes选项,具体如下:
[root@localhost redis]# vim /etc/redis/6379.conf 
#700行 修改为yes 开启AOF持久化功能
appendonly yes
#704行,AOF同步的文件,在进行文件恢复的时候需要把这个文件放到/bin目录
appendfilename "appendonly.aof"

#729-731行三个功能
#同步持久化,每次发生数据变化会立刻写入磁盘
#每秒同步(默认项),每秒异步记录一次
#不同步,交给操作系统决定任何同步
appendfsync always
#appendfsync everysec
# appendfsync no

#796行 忽略最后一条语句(因为可能存在文件)
aof-load-truncated yes
  • AOF的重写机制

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

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

    Bgrewriteaof命令:异步执行一个 AOF(AppendOnly File) 文件重写操作

    即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改

    **注意:**从 Redis 2.4 开始, AOF 重写由 Redis 自行触发, BGREWRITEAOF 仅仅用于手动触发重写操作。

[root@localhost redis]# vim /etc/redis/6379.conf 
#752行 去重功能,可以开启,但是需要设定阈值条件来限制触发去重操作
no-appendfsync-on-rewrite yes

#771-772行。
#大小超过64M.同步内容超过上次日志重写时aof文件2倍大小时,会触发去重操作,删除多出的冗余内容
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb 

六、Redis 性能管理

6.1 内存碎片率
  • ① 操作系统分配的内存值 used_memory_rss 除以 redis 使用的内存值 used_memory 计算得出的;

  • ② 内存碎片是由操作系统低效的分配/回收物理内存导致的

    • 不连续的物理内存分配
  • ③ 跟踪内存碎片率对理解 redis 实例的资源性能是非常重要的;

    内存碎片率稍大于 1 是合理的,这个值表示内存碎片率比较低;

    内存碎片率超过 1.5 ,说明 redis 消耗了实际需要物理内存的 150% ,其中 50% 是内存碎片率;

    内存碎片率低于 1 的,说明 Redis 内存分配超出了物理内存,操作系统正在进行内存交换。

[root@localhost redis]# redis-cli -h 192.168.226.128 -p 6379
192.168.226.128:6379> info memory
# Memory
used_memory:853336					#内存使用总量
used_memory_human:833.34K			#内存使用总量
used_memory_rss:3481600
used_memory_rss_human:3.32M
used_memory_peak:853336
used_memory_peak_human:833.34K
used_memory_peak_perc:100.01%
used_memory_overhead:841110
used_memory_startup:791416
................省略部分内容
mem_fragmentation_ratio:4.29		#内存碎片率
mem_fragmentation_bytes:2669288
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
6.2 内存使用率
  • Redis 实例的内存使用率超过可用最大内存,操作系统开始进行内存与 swqp 空间交换;
  • 避免内存交换
    • 针对缓存数据大小选择;
    • 尽可能的使用 Hash 数据结构;
    • 设置 key 的过期时间
6.3 回收 Key
  • 保证合理分配Redis有限的内存资源
  • 当内存使用达到设置的最大阈值时,需要选择一种key回收策略
    • 默认情况下回收策略时禁止删除的;
    • redis.conf 配置文件中修改maxmemory-policy属性值

用达到设置的最大阈值时,需要选择一种key回收策略

  • 默认情况下回收策略时禁止删除的;
  • redis.conf 配置文件中修改maxmemory-policy属性值
    数据库-----Redis理论+配置+优化_第3张图片

总结

本篇博客仅简单介绍了redis的配置、功能、之后会慢慢更新其他实用功能

你可能感兴趣的:(数据库)