Redis:概念、部署、配置、优化

news2024/11/15 7:35:35

目录

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

关系型数据库

非关系型数据库

非关系型数据库存在的原因

Redis

概念

优点

Redis部署流程

初步设置

安装

初始化

初始化时指定的参数说明

Redis配置文件

修改监听地址

Redis远程连接

远程连接

测试服务端状态

redis-benchmark测试工具

测试请求性能

测试读写性能

set 与 lpush 操作性能

Redis常用命令

创建键值对

get

keys

exists

del

type

rename

renamenx

dbsize

数据库操作

多数据库间切换

多数据库间移动数据

清除数据库内数据

Redis持久化

概念

分类

RDB

AOF

二者选择的标准

Redis 持久化配置

RDB

AOF

AOF重写

性能管理

回收策略


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

关系型数据库

  • 一个结构化的数据库,创建在关系模型基础上
  • 一般面向于记录
  • 比如:Oracle、MySQL、SQL Server、Microsoft Access、DB2等等
  • 基于硬盘

非关系型数据库

  • 除了主流的关系型数据库外的数据库,都认为是非关系型数据库
  • 比如:Redis、MongoDB、Hbase、CouhDB等等
  • 定义键值对,通过调用键去获取值
  • 基于内存
  • 基于C/S架构

非关系型数据库存在的原因

  • High Performance:对数据库高并发读写的需求
  • High Storage:对海量数据高效存储与访问的需求
  • High Scalability && High Availability:对数据库高扩展性与高可用性的需求

Redis

概念

  • Redis是基于内存运行的,并且支持持久化
  • 采用Key-Value(键值对)的存储形式

优点

  1. 具有极高的数据读写速度
  2. 支持数据的持久化(持续存储数据)
  3. 支持数据备份
  4. 原子性

Redis部署流程

初步设置

打开两台虚拟机并连接上XShell,然后开启会话同步,再将redis的源码包导入该主机

101主机作为服务端,102主机作为客户端

为了方便实验,关闭防火墙和内核安全机制,然后安装redis所需的依赖环境

[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
[root@localhost ~]# cd redis-4.0.9
[root@localhost redis-4.0.9]# make
[root@localhost redis-4.0.9]# make PREFIX=/usr/local/redis install
[root@localhost redis-4.0.9]# ln -s /usr/local/redis/bin/* /usr/local/bin/
初始化

由于是使用源码包安装的Redis,在没经过初始化之前是不能使用的,所以这里先初始化redis

还是解压目录下,进入utils目录下,运行install_server.sh初始化脚本进行初始化

这个脚本会让你指定一些信息,全部回车用默认的就行,最后使用netstat命令可以看到redis已经在运行了,监听的IP是127.0.0.1

如果要在同一台主机上部署多个Redis实例,那么在初始化时指定的信息都要改变

实例:运行在内存上的一个进程

[root@localhost redis-4.0.9]# cd utils/
[root@localhost utils]# ./install_server.sh
[root@localhost utils]# netstat -anpt | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      4893/redis-server 1
初始化时指定的参数说明
Selected config:
Port           : 6379                         # 端口号
Config file    : /etc/redis/6379.conf         # 配置文件路径
Log file       : /var/log/redis_6379.log      #  日志文件路径
Data dir       : /var/lib/redis/6379          #  数据文件路径
Executable     : /usr/local/bin/redis-server  # 可执行文件路径
Cli Executable : /usr/local/bin/redis-cli     # 客户端命令行工具

此时关闭会话同步

Redis配置文件

在101(服务端)操作

修改监听地址

在安装完redis后,通过netstat命令可以看到redis目前监听的IP是127.0.0.1,也就是本地的IP,这样是无法远程管理redis的,所以我们这里修改一下redis监听的IP地址,需要修改redis的配置文件


在第70行的参数末尾添加本机的IP地址

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

除此之外,在第93行还可以自定义端口号,第137行可以指定守护进程的开启和关闭

第159行指定PID文件,第167行指定日志级别,第172行指定日志文件


cd进入存放服务文件的目录下,可以看到redis在安装时已经帮我们把服务脚本放到该目录下了

可以运行该脚本并且追加参数restart来重启redis,然后使用netstat命令可以查看到redis目前有了两个进程,其中就有监听本机IP的进程

[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# ls
redis_6379
[root@localhost init.d]# ./redis_6379 restart
[root@localhost init.d]# netstat -anpt | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      4919/redis-server 1 
tcp        0      0 192.168.10.101:6379     0.0.0.0:*               LISTEN      4919/redis-server 1

Redis远程连接

远程连接

在101(服务端)操作

在安装了redis的服务端之后,也同时安装了客户端。而redis不仅可以用客户端来远程连接,也可以在本地连接本地的服务端

[root@localhost ~]# redis-cli
[root@localhost ~]# redis-cli -h 192.168.10.101 -p 6379
127.0.0.1:6379>
127.0.0.1:6379> quit

在102(客户端)操作

也可以指定IP地址来远程连接

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

测试服务端状态

在102(客户端)操作

redis服务端通过乒乓机制来应答客户端的ping测试

[root@localhost ~]# redis-cli -h 192.168.10.101 -p 6379
127.0.0.1:6379> ping
PONG

redis-benchmark测试工具

在101(服务端)操作

测试请求性能

  • -h:指定服务器主机名;
  • -p:指定服务器端口;
  • -c:指定并发连接数;
  • -n:指定请求数
[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -c 100 -n 100000
99.64% <= 1 milliseconds   # 百分之99.94的请求小于1毫秒
100.00% <= 1 milliseconds
80971.66 requests per second  # 每秒能够接收这么多请求

测试读写性能

  • -d:以字节的形式指定 SET/GET 值的数据大小;
  • -q:强制退出 redis。仅显示 query/sec 值;
[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -q -d 100
SET: 86058.52 requests per second  # 每秒
GET: 85470.09 requests per second

set 与 lpush 操作性能

  • -t:仅运行以逗号分隔的测试命令列表;
[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -t set,lpush -n 100000 -q
SET: 86281.27 requests per second
LPUSH: 87183.96 requests per second

Redis常用命令

创建键值对

使用set指令,指定键,然后输入值

127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set num1 11
OK
127.0.0.1:6379> set num2 22
OK
127.0.0.1:6379> set num3 33
OK

get

使用get指令,根据键(Key),获取值(Value)

127.0.0.1:6379> get k1
"1"

keys

使用keys *命令查询所有键

127.0.0.1:6379> keys *
1) "num2"
2) "counter:__rand_int__"
3) "num3"
4) "num1"
5) "k1"
6) "key:__rand_int__"
7) "myset:__rand_int__"
8) "mylist"

查看当前数据库中以num开头的键 

127.0.0.1:6379> keys num*
1) "num2"
2) "num3"
3) "num1"

查看当前数据库中以n开头后面包含任意3位字符的键

127.0.0.1:6379> keys n???
1) "num2"
2) "num3"
3) "num1"

exists

使用exists命令查询指定键是否存在,1表示该键存在,0表示该键不存在

127.0.0.1:6379> exists num1
(integer) 1
127.0.0.1:6379> exists num10
(integer) 0

del

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

  • 显示1表示操作成功
  • 显示0表示操作失败
127.0.0.1:6379> del num3
(integer) 1
127.0.0.1:6379> del num3
(integer) 0

type

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

127.0.0.1:6379>type num1 
string

rename

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

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

127.0.0.1:6379>keys num* 
1) "num1" 
2) "num2" 
127.0.0.1:6379>rename num2 num3 
OK
127.0.0.1:6379>keys num* 
1) "num1" 
2) "num3"

renamenx

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

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

127.0.0.1:6379>keys * 
(1) "num1"
127.0.0.1:6379>get num1 
"11" 
127.0.0.1:6379>renamenx num1 num2
(integer) 0 
127.0.0.1:6379>keys * 
(1) "num1" 
127.0.0.1:6379>get num1 
"11"

dbsize

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

127.0.0.1:6379> dbsize 
(integer) 5

数据库操作

多数据库间切换

redis数据库时提供了16个数据库

使用select 10就进入到第10个数据库了

127.0.0.1:6379>select 10 
OK

多数据库间移动数据

Redis 的多数据库在一定程度上是相对独立的,例如在数据库 0 上面存放 num1 的数据,在其它 1-15 的数据库上是无法查看到的

127.0.0.1:6379>move num1 1     # 将当前数据库中的num1移动到数据库1中 
(integer) 1 
127.0.0.1:6379>select 1     # 切换至目标数据库 1 
OK
127.0.0.1:6379[1]>get k1     # 查看被移动数据 
"11"

清除数据库内数据

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

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

127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> flushall
OK

Redis持久化

概念

  • Redis是运行中内存中,内存中的数据断电丢失
  • 为了能够重用Redis数据,或者防止系统故障需要将Redis中的数据写入到磁盘中,也就是持久化

分类

  • RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本(默认使用RDB进行持久化)
  • AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化

对于静态数据的持久化叫做备份,对于动态数据的持久化叫做快照

RDB
  • Redis的默认持久化方式
  • 默认文件名为dump.rdb
  • 触发条件有手动触发和自动触发
  • Redis加载RDB恢复数据远远快于AOF方式
AOF
  • Redis默认不开启
  • 弥补RDB的不足(数据的不一致性)
  • 采用日志的形式来记录每个写入操作,并追加到文件中
  • Redis重启后会根据日志文件的内容将写入操作从前到后执行一次以完成数据的恢复工作

如果同时开启RDB和AOF功能,Redis重启后会先读取RDB的快照文件,然后再读取日志的信息进行操作,也就是RDB的数据被AOF的数据覆盖了

二者选择的标准

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

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


Redis 持久化配置

RDB

打开在redis的配置文件,可以定义RDB持久化的设置

在219行到221行定义了

[root@localhost ~]# vim /etc/redis/6379.conf
save 900 1  # 在900秒(15分钟)之后,如果至少有1个key发生变化,则生成快照
save 300 10 # 在300秒(5分钟)之后,如果至少有 10 个key发生变化,则生成快照
save 60 10000  # 在60秒(1分钟)之后,如果至少有10000个key 发生变化,则生成快照

在第254行可以定义快照文件的文件名

dbfilename dump.rdb

第264行,可以定义RDB生存文件的路径

dir /var/lib/redis/6379

第242行定义是否进行压缩

rdbcompression yes

AOF

第673行,修改AOF是开启还是关闭,这里我们开启

appendonly yes

第677行,指定了AOF生成的文件名

appendfilename "appendonly.aof"

在702 ~ 704行,指定了AOF持久化的方式

# appendfsync always  # 同步持久化,每次发送数据变化会立刻写入硬盘
appendfsync everysec  # 默认值,每秒异步记录一次
# appendfsync no      # 不同步

AOF重写

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

[root@localhost ~]# redis-cli
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

性能管理

查看内存信息

127.0.0.1:6379> info memory

回收策略

设置key的过期时间,这里设置过期时间为5秒。5秒后该键对应的值就为空

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> expire test 5
(integer) 1
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> get test
(nil)

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

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

相关文章

智慧景区系统:科技赋能旅游新体验

随着信息技术的飞速发展&#xff0c;旅游业正经历着前所未有的变革&#xff0c;智慧景区系统作为这一变革的先锋&#xff0c;正以其独特的魅力重塑着游客的旅行方式。智慧景区系统&#xff0c;顾名思义&#xff0c;是运用物联网、大数据、云计算、人工智能等现代信息技术&#…

Git客户端 TortoiseGit下载

1.概述 使用TortoiseGit比直接使用git客户端和命令来实现代码管理更为方便&#xff0c;本文贴出了软件的下载地址和基本配置信息 2.TortoiseGit安装与配置 TortoiseGit是TortoiseSVN的Git版本&#xff0c;是一个在Windows系统下使用的Git版本控制客户端。它提供了图形用户界…

MIT线性代数P5

置换矩阵 置换矩阵是行重新排列的单位矩阵。 置换矩阵用P表示&#xff0c; 性质&#xff1a; n阶置换矩阵共有n!个

37.x86游戏实战-XXX遍历怪物数组

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

0812|TCP和UDP跨主机通信

思维导图 TCP实现跨主机通信 服务器端 #include<myhead.h> #define SER_PORT 6666 //端口号 #define SER_IP "192.168.0.108" //服务器IP int main(int argc, const char *argv[]) {//创建套接字文件int sfd socket(AF_INET,SOCK_STREAM,0);if(sfd -1){pe…

进阶!haproxy高级功能与配置

文章目录 前言基于cookie的会话保持IP透传四层IP透传未开启状态开启透传状态 七层IP透传 自定义错误界面重定向HAProxy 四层负载之数据库HAProxy https 前言 本文主要介绍HAProxy高级配置及使用案例 文章相关连接如下&#xff1a; 如果想深入了解haproxy算法的相关知识&…

基于Python+Django+Vue+Mysql前后端分离的图书管理系统

利用空闲休息时间开始自己写了一套图书管理系统。现将源码开源&#xff0c;项目遇到问题 PythonDjangoVue图书管理系统开发全流程 大家好&#xff0c;我是程序员科科&#xff0c;这是我开源的基于PythonDjangoVue的图书管理系统 希望可以帮助想学前后端分离的同学 项目中遇…

积极创新模式,推动智慧场馆建设

智慧场馆是指基于信息技术应用的场馆建设模式&#xff0c;利用物联网、云计算、大数据分析等技术手段&#xff0c;实现场馆资源的管理优化、运营效率的提升以及用户体验的改善。智慧场馆在我国得到了广泛的政策支持和推动&#xff0c;政府出台了一系列鼓励智慧场馆建设的政策措…

Java SIP Client

采用JAIN SIP API实现一个SIP客户端实现向SIP服务器注册。SIP服务器可以为FreeSWITCH也可以为满足GB28181的SIP平台。话不多说直接看注册流程图&#xff1a; 代码实现&#xff1a; 创建maven工程添加依赖 <dependencies><dependency><groupId>javax.sip</…

Apple Maps现在可在Firefox和Mac版Edge浏览器中使用

Apple Maps最初只能在 Windows 版 Safari、Chrome 浏览器和 Edge 浏览器上运行&#xff0c;现在已在其他浏览器上运行&#xff0c;包括 Mac 版 Firefox 和 Edge。经过十多年的等待&#xff0c;Apple Maps于今年 7 月推出了新版地图应用的测试版&#xff0c;但只能在有限的浏览器…

哈希表 - 三数之和

15. 三数之和 方法一&#xff1a;排序双指针 /*** param {number[]} nums* return {number[][]}*/ var threeSum function(nums) {const res [], len nums.length;// 将数组排序nums.sort((a, b) > a - b)for (let i 0; i < len; i) {let l i 1, r len - 1, iNum…

什么是令牌桶算法?工作原理是什么?使用它有哪些优点和注意事项?

大家好&#xff0c;我是鸭鸭&#xff01; 此答案节选自鸭鸭最近弄的面试刷题神器面试鸭 &#xff0c;更多大厂常问面试题&#xff0c;可以点击下面的小程序进行阅读哈&#xff01; 目前这个面试刷题小程序刚出&#xff0c;有网页和小程序双端可以使用&#xff01; 回归面试题…

网络初学者必备:100个基础知识全掌握

网络安全学习路线 如果你对网络安全入门感兴趣&#xff0c;那么你需要的话可以点击这里网络安全重磅福利&#xff1a;入门&进阶全套282G学习资源包免费分享&#xff01; 或者扫描下方csdn官方合作二维码获取哦&#xff01; 1 什么是链接? 链接是指两个设备之间的连接。…

OpenCV 基本使用

OpenCV 基本使用 参考教程&#xff1a; GitHub - gaoxiang12/slambook2: edition 2 of the slambook 1. 安装 OpenCV 1.1 下载 OpenCV 参考教程&#xff1a; 无法定位软件包libjasper-dev的解决办法-CSDN博客 视觉slam14讲ch5 opencv安装 ubuntu20.04_libvtk5-dev-CSDN博…

机器学习——聚类算法K-Means

目录 一、初识聚类 1. 认识聚类算法 2. 聚类的流程 3. 簇内误差平方和 Inertia越小模型越好吗&#xff1f; 二、KMeans介绍 1. 重要参数n_clusters 2. 模型评估指标 &#xff08;1&#xff09;真实标签己知的时候 &#xff08;2&#xff09;真实标签未知的时候 三、s…

Tomcat 最大连接数实现原理

spring boot 内置tomcat设置连接数 max-connections: 5 server:port: 9898servlet:context-path: /testtomcat:connection-timeout: 5000max-connections: 5accept-count: 5 ##初始化连接数量connectionLimitLatch protected LimitLatch initializeConnectionLatch() {if (ma…

【区块链+食品安全】农业产业全过程溯源云平台 | FISCO BCOS应用案例

近年来&#xff0c;食品安全问题频发&#xff0c;尤其疫情期间&#xff0c;海鲜、冷冻畜牧产品的入口安全成为大众关注焦点&#xff0c;追溯、确保相关产品生产、运输、售卖等环节的信息真实、有效&#xff0c;成为保证食品安全的核心环节。浙江天演维真网络科技股份有限公司基…

基于ICMP(Ping)的多线程网络通道监视程序(QT)开发

基于ICMP(Ping)的多线程网络通道监视程序(QT)开发 1、 ICMP原理简介 可参考 ICMP(Ping)功能原理及其C实现简介 。 2、 网络通道监视程序开发 设计原理&#xff1a; 通过PING 功能实现服务器、交换机、网闸等设备的网络检测&#xff0c;判断网络的否可达和TTL计算 。 具备功…

微深节能 库区智能化无人天车管理系统 格雷母线

格雷母线在库区智能化无人天车管理系统的应用中&#xff0c;发挥了至关重要的作用。 一、系统构成与原理 系统构成&#xff1a; 格雷母线高精度位移测量系统主要由格雷母线、天线箱、地址解码器、地址编码器四个核心部分组成。这些组件协同工作&#xff0c;实现对移动设备的精确…

c++41两头堵模型

直接拷到自己的内存空间 字符串反转 递归&#xff1a;参数的入栈模型 函数的调用模型 先被调用的模型后执行 向局部变量拷贝内存 传两个参数 做函数结果