Redis 配置与优化

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

(一)关系型数据库

关系型数据库是结构化数据库,创建在关系型模型数据库,创建面向于记录。

常见的关系型数据库:Oracle、MySQL、SQL  Server、Microsoft  Access、DB2。

(二)非关系型数据库

NOSQL=Not  Only SQL是非关系型数据库的总称。根据存储方式,存储结构及使用场景的不同,称为非关系型数据库。除主流关系型数据库以外的数据库,都可以称为非关系型数据库。

常见非关系型数据库:Redis、MongoDB,Hbase、CouhDB。

二、Redis基础

(一)Redis简介

Redis是一款开源,使用c语言编写的Nosql数据库,基于内存运行并支持持久化,采用key-value(键值对)的存储形式。其端口号是6379。

(二)Redis优点

  1. 具有较高的数据读写速度。
  2. 支持丰富的数据类型。key-value,strings,lists,hashes,sets,ordered sets。
  3. 支持数据的持久化。数据保存在磁盘中,重启可以加载使用。
  4. 原子性。
  5. 支持数据备份。

三、redis安装

1. 安装Redis

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# setenforce 0

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

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

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

[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
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/

 [root@localhost redis-4.0.9]# cd utils/
其中:install_server.sh  是初始化脚本

[root@localhost utils]# ./install_server.sh
Please select the redis executable path [] /usr/local/redis/bin/redis-server (给予可执行的路径)

查看进程及服务控制
[root@localhost utils]# netstat -anpt | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      5360/redis-server 1 
[root@localhost utils]# /etc/init.d/redis_6379 stop     (redis关闭)
[root@localhost utils]# /etc/init.d/redis_6379 start        (开启)
[root@localhost utils]# /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                                               //启用守护进程
pidfile /var/run/redis_6379.pid                      //指定 PID 文件
loglevel notice                                                  //日志级别
logfile /var/log/redis_6379.log                            //指定日志文件

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

2.redis 命令工具

[root@localhost utils]# redis-cli                 (本机登录)
[root@localhost utils]# redis-cli -h 192.168.10.101 -p 6379     (远程登陆)
192.168.10.101:6379> ping              (检测服务正常运行)
PONG

3:redis-benchmark 测试工具

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

  •  -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 连接并等待。
  • (1)测试请求性能

    [root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000

    备注:

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

  •  -p:指定服务器端口;

     -c:指定并发连接数;

     -n:指定请求数;

(2)测试存取性能

[root@localhost ~]#redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100

备注:

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

-p:指定服务器端口;

-d:以字节的形式指定 SET/GET 值的数据大小;

-q:强制退出 redis。仅显示 query/sec 值;

  1. 四、Redis数据库常用命令

set  存放数据  命令格式  set  key  value

get  获取数据  命令格式  get  key

(一)key相关命令

1.添加键值对

127.0.0.1:6379> set 1 1
OK
127.0.0.1:6379> set 2 2
OK
127.0.0.1:6379> set 3 3
OK

2. 查看数据库中所有值

127.0.0.1:6379> keys *
1) "3"
2) "1"
3) "2"

3.查看数据库中以v开头的数据
127.0.0.1:6379>KEYS v*

4.查看数据库中以v开头的任意一位数据

127.0.0.1:6379>KEYS v?

5.查看当前数据库中以 v 开头的后面包含任意两位的数据

127.0.0.1:6379>KEYS v??

(二)exists  

判断该值是否存在。

127.0.0.1:6379>exists f5        判断 f5 是否存在

(integer) 1          结果为1,表示 f5 键是存在 

(integer) 0             结果为0,表示 f5 键不存在

(三)del

del 命令可以删除当前数据库的指定 key

127.0.0.1:6379> del v5       删除数据库中v5

(integer) 1

127.0.0.1:6379>get v5

(nil)

(四)type

使用 type 命令可以获取 key 对应的 value 值类型

127.0.0.1:6379>type k1

string

备注:

redis支持的数据类型

  • String:字符串,是最简单的类型,就是普通的set和get,作key value缓存。 
  • Hash:散列算法,类似map的一种结构,一般就是可以将结构化的数据,比如一个对象给缓存在redis里
  • List:List是有序列表,可以通过list存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的东西
  • Set:Set是无序集合,自动去重。
  • Sorted Set:Sorted Set是排序的set,去重但可以排序,写进去的时候给一个分数,自动根据分数排序。

(五)rename

rename 命令是对已有 key 进行重命名

在实际使用过程中,建议先用 exists 命令查看目标 key 是否存在,然后再决定是否执行 rename 命令,以避免覆盖重要数据。

127.0.0.1:6379>rename v22 v2        把 v22 重命名为 v2

OK

(六)renamenx

renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在。

使用renamenx 命令进行重命名时,如果目标 key 存在则不进行重命名。

(七)dbsize

dbsize 命令的作用是查看当前数据库中 key 的数目。

127.0.0.1:6379> dbsize

(integer) 5

五、多数据库常用命令

(一)多数据库之间切换

Redis 在没有任何改动的情况下默认包含 16 个数据库,数据库名称是用数字 0-15 来依次命名的

(1)切换至序号为 10 的数据库

127.0.0.1:6379>select 10

OK

(2)切换至序号为 15 的数据库

127.0.0.1:6379[10]>select 15

OK

(3)切换至序号为 0 的数据库

127.0.0.1:6379[15]>select 0

(二)多数据库之间移动数据

127.0.0.1:6379>set k1 100          在数据库0创建  k1

OK

127.0.0.1:6379>get k1

"100"

127.0.0.1:6379>move k1 1               // 将数据库 0 中 k1 移动到数据库 1 中

(integer) 1

127.0.0.1:6379>select 1                    //切换至目标数据库 1

OK

127.0.0.1:6379[1]>get k1                    //查看被移动数据

"100"

127.0.0.1:6379[1]> select 0

OK

127.0.0.1:6379> get k1                        //在数据库 0 中无法查看到 k1 的值

(nil)

(三)清除数据库内的数据

清空当前数据库数据,使用 FLUSHDB

命令实现;清空所有数据库的数据,使用 FLUSHALL 命令实现。

六、Redis 持久化

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

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

RDB与AOF的区别

       ROB在指定时间间隔内将数据快照写入磁盘,是fork的一个子进程,先将数据写入临时文件夹,成功之后将替换之前文件,用二进制压缩储存。

 AOF以日志形式记录服务器每一个写,删除操作。查询操作不会记录,以文本的方式记录。

 

RDB和AOF优缺点

RDB优点:

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

       恢复数据速度快。

       性能最大化

       启动效率高

RDB缺点:

       宕机之前没有保存的数据会丢失。

       RDB通过fork子进程协助完成,消耗资源

AOF优点:

       数据的持久性较高

       在append模式下,出现宕机也不会破坏日志文件内容。

       可以启动rewrite机制,保护数据安全性。

AOF缺点:

        AOF恢复数据速度慢

        AOF运行效率较低

二者选择的标准:

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

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

备注:

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

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

七、Redis 持久化的配置

(一)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行

(二)AOF 持久化配置

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

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

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

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

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

  • aof-load-truncated yes   ##769行

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

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

八、性能问题

(一)查看内存信息

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                                  带单位展示

(二)回收策略

maxmemory-policy:回收策略

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

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

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

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

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

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

设置key的过期时间

127.0.0.1:6379> expire v1 10          v1的过期时间为10秒

备注:

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

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

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

相关文章

2024年浙江省高考分数一分一段数据可视化

下图根据 2024 年浙江高考一分一段表绘制&#xff0c;可以看到&#xff0c;竞争最激烈的分数区间在620分到480分之间。 不过&#xff0c;浙江是考两次取最大&#xff0c;不是很有代表性。看看湖北的数据&#xff0c;580分到400分的区段都很卷。另外&#xff0c;从这个图也可以…

【vue】下载 打印 pdf (问题总结)- 持续更新ing

这里是目录标题 一、pdf1.查看 下载一、pdf 1.查看 下载 样式 Code<template><div><el-table :data="pdfList" style="width: 100%" border ><el-table-columnprop="index"label="序号"width="80"ali…

告别低效地推!Xinstall助力,一键生成专属渠道二维码

在移动互联网时代&#xff0c;地推作为一种传统而有效的推广方式&#xff0c;依然被众多企业所青睐。然而&#xff0c;传统的地推方式往往伴随着繁琐的填码、人工登记以及难以追踪的下载来源等问题&#xff0c;极大地降低了推广效率。为了解决这些痛点&#xff0c;Xinstall应运…

5,智能合约(react+区块链实战)

5&#xff0c;智能合约&#xff08;react区块链实战&#xff09; 5-1 智能合约5-2 metamask安装及私有链搭建互相联动5-3 solidity数据类型-布尔-数字-地址&#xff08;owner区别&#xff09;5-4 solidity 数组和映射&#xff08;代币转账&#xff09;5-5 solidity结构体与枚举…

AI虚拟医生重塑医患关系

如今&#xff0c;越来越多的企业开始选择用AI虚拟数字人播报员替代真人出镜&#xff0c;这不仅有助于企业实现降本增效的目标&#xff0c;更能让广告传播趋向多样化和个性化。对于普通人而言&#xff0c;也摆脱了真人出镜的种种烦恼&#xff0c;让表达更加自由与便捷。AI虚拟数…

视频太大怎么压缩变小?这几种压缩方法值得收藏!

视频太大怎么压缩变小&#xff1f;在数字化浪潮汹涌的时代&#xff0c;处理大型视频文件已不再仅仅是存储空间的挑战&#xff0c;我们身处于数据洪流之中&#xff0c;数据的安全与隐私的保护已然成为了我们不得不面对的重大议题&#xff0c;特别是随着视频内容的井喷式增长及其…

怎么提高音频的播放速度?可以提高音频播放速度的四种方法推荐

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是一种有效的策略&#xff0c;可以显著节省时间和提升信息获取的效率。随着信息量不断增加和学习需求的多样化&#xff0c;快速播放音频已成为许多人在日常生活和工作中的常见做法。这种方法不仅可以用于提高学习效率&…

医院人员管理系统03_下午:C3P0连接池,完成简单的增删改查

文章目录 什么是C3P0项目目录Students.javaC3P0Conn.javaStuDao.java套路代码 什么是C3P0 C3P0连接池要比jdbc更简单&#xff0c;dao层写方法就能看出来 项目目录 Students.java 没有变&#xff0c;直接是jdbc的实体类 跳转我的上一篇文章查看实体类代码 C3P0Conn.java 这…

Elasticsearch:Node.js ECS 日志记录 - Winston

这是继上一篇文章 “Elasticsearch&#xff1a;Node.js ECS 日志记录 - Pino” 的续篇。我们继续上一篇文章来讲述使用 Winston 包来针对 Node.js 应用生成 ECS 向匹配的日子。此 Node.js 软件包为 winston 记录器提供了格式化程序&#xff0c;与 Elastic Common Schema (ECS) …

一键掌握天气动态 - 基于Vue和高德API的实时天气查询

前言 本文将学习如何使用Vue.js快速搭建天气预报界面,了解如何调用高德地图API获取所需的天气数据,并掌握如何将两者有机结合,实现一个功能丰富、体验出色的天气预报应用 无论您是前端新手还是有一定经验,相信这篇教程都能为您带来收获。让我们一起开始这段精彩的Vue.js 高德…

音视频开发—FFmpeg 从MP4文件中抽取视频H264数据

文章目录 MP4文件存放H264数据方式MP4 文件结构概述H.264 数据在 MP4 中的存储1. ftyp 盒子2. moov 盒子3. mdat 盒子 H.264 数据在 stsd 盒子中的存储&#xff08;AVC1&#xff09;AVC1与Annex-B 格式&#xff08;裸 H.264 流&#xff09;的区别 从MP4文件中提取H264裸流步骤&…

zynq启动和程序固化流程

普通FPGA启动 FPGA的启动方式主要包含主动模式、被动模式和JTAG模式。 主动模式&#xff08;AS模式&#xff09; 当FPGA器件上电时&#xff0c;它作为控制器从配置器件EPCS中主动发出读取数据信号&#xff0c;并将EPCS的数据读入到自身中&#xff0c;实现对FPGA的编程。这种…

石油巨头受冲击!埃克森美孚、BP接连发出盈利预警

KlipC报道&#xff1a;近日&#xff0c;BP&#xff08;英国石油&#xff09;预计其第二季度将面临10亿至20亿美元的减值费用&#xff0c;并发出警告称其炼油利润率“大幅下降”&#xff0c;石油交易收益预计出现疲软。消息公布后&#xff0c;其股价下跌超4%。 由于中间馏分油利…

【三维重建】【深度学习】windows11下3DGS代码Pytorch实现

【三维重建】【深度学习】windows11下3DGS代码Pytorch实现 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】windows11下3DGS代码Pytorch实现前言3DGS模型运行安装CUDA安装 Visual Studio C编…

PlugLink的技术架构实例解析(附源码)

在探讨PlugLink这一开源应用的实际应用与技术细节时&#xff0c;我们可以从其构建的几个核心方面入手&#xff0c;结合当前AI编程的发展趋势&#xff0c;为您提供既有实例又有深度解析的内容。 PlugLink的技术架构实例解析 前端技术选型 —— layui框架&#xff1a; PlugLi…

最新 Kubernetes 集群部署 + Contranerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

Cadence23 中 Capture 与 PCB Editor 的交互

1.Capture选中器件在PCB Editor 中高亮显示 1.点击N的图标选项卡&#xff0c;导出第一网表 2,导入第一网表&#xff1a; 点击移动命令&#xff0c;在查找选项卡中选择Symbol器件选项卡&#xff1a; 点击器件即可高亮&#xff1a; 2.PCB Editor选中器件在 Capture中高亮显示 …

libcoap3对接华为云平台

文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台&#xff0c;本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先&#xff0c;你需要在华为云平台上创建…

Matlab提取excel数据及处理的实操举例

实现目的 当excel数据量庞大的时候&#xff0c;如果采用人工处理数据的方法就会成为非常出力不讨好的事&#xff0c;既容易出错&#xff0c;又容易抑郁。 利用matlab处理成为既简单又高效的方式。 例如&#xff0c;以GD32F7xx系列的管脚复用表格为例&#xff0c;在169x19的e…

昇思MindSpore学习笔记6-06计算机视觉--Vision Transormer图像分类

摘要&#xff1a; 记录MindSpore AI框架使用ViT模型在ImageNet图像数据分类上进行训练、验证、推理的过程和方法。包括环境准备、下载数据集、数据集加载、模型解析与构建、模型训练与推理等。 一、概念 1. ViT模型 Vision Transformer 自注意结构模型 Self-Attention Tran…