【Redis一】Redis配置与优化

目录

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

1.关系型数据库

2.非关系型数据库

3.二者区别

4.非关系型数据库产生背景

5.NoSQL与SQL数据记录对比

关系型数据库

非关系型数据库

二.Redis相关概述

1.简介

2.五大数据类型

3.优缺点

3.1.优点

3.2.缺点

4.使用场景

5.采用单线程的原因

6.哪些数据适合放入缓存中

7.运行速度快的原因

8.与memcached比较

三.Redis的安装配置

1.源码编译安装

2.redis服务管理

五.Redis的命令工具

1.redis-cli 命令行工具

2.redis-benchmark 测试工具

2.1.并发连接

2.2.数据包的存取的性能测试

2.3.键值对的创建速度测试

六.Redis 数据库常用命令

1.redis键值对的存取 

2.redis键值列表的获取

2.1.获取全部列表

2.2.获取以某字符为开头任意长度的键

2.3.获取以某字符为开头,后面为指定长度的键

3.判断键是否存在 

4.删除键

5.查看键存储的数据类型

6.rename 重命名

7.renamenx 重命名

8.dbsize查看键数目 

9.设置和清空密码

设置和查看密码

清空密码

七.Redis 多数据库操作

1.多数据库间切换select

2.多数据库间移动数据

3.清除数据库内数据(慎用)

八.Redis 常见错误与解决方案

1.常见运维故障

2.故障排查


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

1.关系型数据库

2.非关系型数据库

3.二者区别

SQLNoSQL
存储结构二维表格结构不是二维表格结构,不同的NoSQL采用不同的存储方式(比如键对值、文档、索引、图形结构、时间序列等)
扩展方式纵向扩展(提升单机的硬件性能)横向扩展(增加服务器节点数量)
事务典型基于ACID原则,对事务控制更稳定,细粒度更高基于BASE原则,对事务控制的稳定性和细粒度不如SQL
典型代表

4.非关系型数据库产生背景

可用于应对Web2.0纯动态网站类型的三高问题

  • High performance —— 对数据库高并发读写需求
  • Hugestorage——对海量数据高效存储与访问需求
  • HighScalability&&HighAvailability——对数据库高可扩展性与高可用性需求

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

据库发展带来新的思路。让关系型数据库关注在关系上和对数据的一致性保障,非关系型数据库关

注在存储和高效率上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在

非关系型数据库中,提升访问速度

5.NoSQL与SQL数据记录对比

关系型数据库

  • 实例-->数据库-->表(table)-->记录行(row)、数据字段(column)

非关系型数据库

  • 实例-->数据库-->集合(collection)-->键值对(key-value)
  • 非关系型数据库不需要手动建数据库和集合(表)

二.Redis相关概述

1.简介

2.五大数据类型

基础数据类型包括:string(字符串)、list(列表,双向链表)、hash(散列,键值对集合)、set(集合,不重复)和sorted set也可以称为Zset(有序集合)

结构类型结构存储的值结构的读写能力
String可以是字符串、整数、浮点数对整个字符串或者字符串的其中一部分进行操作,对整数和浮点数执行自增或者自减操作
list一个链表,链表上每个节点都包含了一个字符串从链表的两端推入或者弹出元素:根据偏移量对链表进行修剪:读取单个或多个元素,根据值查找或者移除元素
set包含字符串的无序收集器,并且被包含的每个字符串都是独一无二各不相同的添加、获取、移除单个元素,检查一个元素是否存在与集合中,计算交集、并集、差集,从集合里面随机获取元素
hash包含键值对的无序散列表添加、获取、移除单个键值对,获取所有键值对
zset字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定添加、获取、删除单个元素,根据分值范围或者成员来获取元素

3.优缺点

3.1.优点

3.2.缺点

  • 缓存和数据库双写一致性问题
  • 缓存雪崩问题
  • 缓存击穿问题
  • 缓存的并发竞争问题

4.使用场景

  • Redis作为基于内存运行的数据库,是一个高性能的缓存,一般应用在Session缓存、队列、排行榜、计数器、最近最热文章、最近最热评论、发布订阅等
  • Redis 适用于数据实时性要求高、数据存储有过期和淘汰特征的、不需要持久化或者只需要保证弱一致性、逻辑简单的场景
  • 通常会将部分数据放入缓存中,来提高访问速度,然后数据库承担存储的工作

5.采用单线程的原因

首先要明确的是Redis单线程指的是网络IO和键值对读写是由一个线程来完成的,但Redis持久

化、集群数据等是由额外的线程执行的。了解Redis使用单线程之前可以先了解一下多线程的开

通常情况下,使用多线程可以增加系统吞吐率或者可以增加系统扩展性,但多线程通常会存在同时

访问某些共享资源,为了保证访问共享资源的正确性,就需要有额外的机制进行保证,这个机制首

先会带来一定的开销。其实对于多线程并发访问的控制一直是一个难点问题,如果没有精细的设

计,比如说,只是简单地采用一个粗粒度互斥锁,就会出现不理想的结果。即使增加了线程,大部

分线程也在等待获取访问共享资源的互斥锁,并行变串行,系统吞吐率并没有随着线程的增加而增

此外

值得注意的是在Redis6.0中引入了多线程。在Redis6.0之前,从网络IO处理到实际的读写命令处理

都是由单个线程完成的,但随着网络硬件的性能提升,Redis的性能瓶颈有可能会出现在网络IO的

处理上,也就是说单个主线程处理网络请求的速度跟不上底层网络硬件的速度。针对此问题,

Redis采用多个IO线程来处理网络请求,提高网络请求处理的并行度,但多IO线程只用于处理网络

请求,对于读写命令,Redis仍然使用单线程处理!

6.哪些数据适合放入缓存中

  • 即时性   例如查询最新的物流状态信息。
  • 数据一致性要求不高   例如门店信息,修改后,数据库中已经改了,五分钟后缓存中才是最新的,但不影响功能使用。
  • 访问量大且更新频率不高   例如网站首页的广告信息,访问量大,但是不会经常变化。
     

7.运行速度快的原因

  • Redis是基于内存运行,数据的读写都是在内存中完成的
  • 数据结构简单,可以直接使用 键值对 的方式存储数据
  • 数据读写采用单线程模型,避免了多线程切换带来的CPU性能损耗,同时也不用考虑各种锁的影响
  • 采用IO多路复用模型,非阻塞IO可以使网络线程处理更多的网络连接请求,提高了网络并发能力

8.与memcached比较

三.Redis的安装配置

1.源码编译安装

---------------------- Redis 安装部署 ----------------------------------------
//环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config#修改内核参数
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 2048sysctl -p//安装redis
yum install -y gcc gcc-c++ makecd /opt/tar xf redis-7.0.13.tar.gz
cd /redis-7.0.13
make
make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。#创建redis工作目录
mkdir /usr/local/redis/{conf,log,data}cp /opt/redis-7.0.13/redis.conf /usr/local/redis/conf/useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/#环境变量
vim /etc/profile 
PATH=$PATH:/usr/local/redis/bin		#增加一行source /etc/profile//修改配置文件
vim /usr/local/redis/conf/redis.conf
bind 127.0.0.1 192.168.80.108					#87行,添加 监听的主机地址
protected-mode no					#111行,将本机访问保护模式设置no。如果开启了,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应
port 6379										#138行,Redis默认的监听6379端口
daemonize yes									#309行,设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件
dir /usr/local/redis/data						#504行,指定持久化文件所在目录
requirepass abc123								#1037行,增加一行,设置redis密码

2.redis服务管理

//定义systemd服务管理脚本
vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target#启动服务
systemctl start redis-server
systemctl enable redis-servernetstat -lntp | grep 6379

五.Redis的命令工具

redis-server用于启动redis的工具
redis-benchmark用于检测redis在本机的运行效率
redis-check-aof修复AOF持久化文件
redis-check-rdb修复RDB持久化文件
redis-cliredis命令行工具
redis-sentinelRedis 哨兵集群使用

1.redis-cli 命令行工具

语法:redis-cli -h host -p port [-a password]
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库redis-cli -h 192.168.80.108 -p 6379 -a 'abc123'  

2.redis-benchmark 测试工具

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

基本的测试语法:redis-benchmark [选项] [选项值]
-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 连接并等待

2.1.并发连接

redis-benchmark -h 192.168.80.108 -p 6379 -a 'abc123' -c 100 -n 100000

2.2.数据包的存取的性能测试

redis-benchmark -h 192.168.80.108 -p 6379 -a 'abc123' -q -d 100

2.3.键值对的创建速度测试

redis-benchmark -t set,lpush -a 'abc123' -n 100000 -q

六.Redis 数据库常用命令

set存放数据
get获取数据
keys *查看所有的key
keys k?查看k开头后面任意一位的数据
exists判断键是否存在(存在1,不存在0)
del删除键
type查看键对应的value值类型
rename key1 key2改名,不管key2是否存在都会改名成功。如果存在,key1的值会覆盖key2得值
renamenx key1 key2改名,若key2不存在,可以改名成功。若key2存在则不进行改名
dbsize查看当前数据库中key的数目

1.redis键值对的存取 

set:存放数据,命令格式为 set key valueget:获取数据,命令格式为 get key

2.redis键值列表的获取

设置键值

2.1.获取全部列表

2.2.获取以某字符为开头任意长度的键

keys h*

2.3.获取以某字符为开头,后面为指定长度的键

添加测试数据

keys v??
keys v???
keys v????

3.判断键是否存在 

exists  键   #返回结果 为0 则为不存在,返回为1即为存在

4.删除键

del 键

5.查看键存储的数据类型

 type 键

6.rename 重命名

  • 使用rename命令进行重命名时,无论目标key是否存在都会进行重命名,且源key的值会覆盖目标key的值
  • 在实际使用过程中,建议先用exists命令查看目标key 是否存在,然后再决定是否执行rename 命令,以避免覆盖重要数据
命令格式: rename 源key 目标key

7.renamenx 重命名

  • 是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)
命令格式:renamenx  源key 目标key

8.dbsize查看键数目 

dbsize

9.设置和清空密码

设置和查看密码

#设置redis的登录密码
config set requirepass 123123
#查看redis的密码
config get requirepass 

清空密码

#清空密码config set requirepass '' 

七.Redis 多数据库操作

  • Redis 支持多数据库,Redis默认情况下包含16个数据库,数据库名称是用数字0-15来依次命名的
  • 使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库
  • 多数据库相互独立,互不干扰

1.多数据库间切换select

 命令格式:select 序号​#使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库。127.0.0.1:6379>select 10      #切换至序号为10的数据库​127.0.0.1:6379[10]>select 15  #切换至序号为15的数据库​127.0.0.1:6379[15]>select 0   #切换至序号为0的数据库​127.0.0.1:6379[0]>

2.多数据库间移动数据

move 键值 序号(库的序号)

3.清除数据库内数据(慎用)

 FLUSHDB:清空当前数据库数据FLUSHALL:清空所有数据库的数据,

八.Redis 常见错误与解决方案

1.常见运维故障

  • 使用 keys* 把库堵死。——建议使用别名把这个命令改名
  • 超过内存使用后,部分数据被删除。——这个有删除策略的,选择适合自己的即可
  • 没开持久化,却重启了实例,数据全掉。——记得非缓存的信息需要打开持久化
  • RDB的持久化需要 Vm.overcommit_memory=1 ,否则会持久化失败
  • 没有持久化情况下,主从,主重启太快,从还没认为主挂的情况下,从会清空自己的数据,人为重启主节点前,先关闭从节点的同步

2.故障排查

  • 结合Redis 监控查看QPS、缓存命中率、内存使用率等信息
  • 确认机器层面的资源是否有异常
  • 故障时及时上机,使用 redis-cli monitor 打印出操作日志,然后分析(事后分析此条失效)
  • 和研发沟通,确认是否有大Key在堵塞(大Key也可以在日常的巡检中获得) 和组内同事沟通,确实是否有误操作
  • 和运维同事、研发一起排查流量是否正常,是否存在被刷的情况

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

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

相关文章

苹果应用Testflight上架完整步聚

1.全部选中下图内容,包含iPhone与iPad屏幕所有旋转方向 2. 准备App图标,一定要有152和167这个尺寸,不然后提交不过 3.1024这个尺寸的的图像不能有透明层,不然提交不通过 4.选中编译设备为Any iOS Device[arm64] 5.选择Product下的Archive进行生成 6.在弹出的窗口中选择Test…

Python之三大基本库——Numpy(2)

接着上次的内容接着讲&#xff0c;连续号都续上哈 七、numpu中random的随机生成函数 以下总结的是比较常用到的函数&#xff1a; 下面分别介绍一下不用的用法&#xff1a; 首先导入创建函数 import numpy as np np.random.seed(666)1、 rand(d0,d1,d2,...,dn)&#xff1a;返…

JavaWeb系列三: JavaScript学习 下

文章目录 js数组定义方式数组遍历 js函数函数入门函数使用方式使用方式一使用方式二 函数注意事项函数练习题 定义对象使用object定义使用{}定义 事件onload事件onclick事件失去焦点事件内容发生改变事件表单提交事件静态注册动态注册表单作业 dom对象文档对象模型document对象…

边缘计算VNC智能盒子如何助力HMI设备实现二次开发?

HMI&#xff08;Human-Machine Interface&#xff09;又称人机界面&#xff0c;是用户与机器之间交互和通信的媒介。今天带你了解智能盒子如何助力HMI设备实现二次开发&#xff1f; HMI设备被广泛应用在工业自动化中&#xff0c;具有显示设备信息&#xff0c;实时监测&#xf…

python爬虫--scrapy框架

Scrapy 一 介绍 Scrapy简介 1.Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架&#xff0c;用途非常广泛2.框架的力量&#xff0c;用户只需要定制开发几个模块就可以轻松的实现一个爬虫&#xff0c;用来抓取网页内容以及各种图片&#xff0c;非…

GPT-5对普通人有何影响

这篇文章对ChatGPT的使用方法和提问技巧进行了讨论&#xff0c;重点强调了背景信息和具体提问的重要性。文章清晰地传达了如何提高ChatGPT回答的质量&#xff0c;以及个人在使用ChatGPT时的体会和建议。然而&#xff0c;文章在逻辑组织和表达方面还有一些可以改进的地方&#x…

静态库和动态库

1、编译过程 1.预处理&#xff1a;解释并展开源程序当中的所有的预处理指令&#xff0c;此时生成 *.i 文件。 2.编译&#xff1a;词法和语法的分析&#xff0c;生成对应硬件平台的汇编语言文件&#xff0c;此时生成 *.s 文件。 3.汇编&#xff1a;将汇编语言文件翻译为对应处理…

压缩pdf文件大小的方法,如何压缩pdf格式的大小

pdf太大怎么压缩&#xff1f;当你需要通过电子邮件发送一个PDF文件&#xff0c;却发现文件太大无法成功发出时&#xff0c;这些情况下&#xff0c;我们都需要找到一种方法来压缩PDF文件&#xff0c;以便更便捷地进行分享和传输。PDF文件的大小通常与其中包含的图片、图形和文本…

入门JavaWeb之 Response 下载文件

web 服务器接收到客户端的 http 请求 针对这个请求&#xff0c;分别创建一个代表请求的 HttpServletRequest 对象&#xff0c;代表响应的 HttpServletResponse 对象 获取客户端请求过来的参数&#xff1a;HttpServletRequest 给客户端响应一些信息&#xff1a;HttpServletRe…

面试相关-接口测试常问的问题

1.为什么要做接口测试 (1)现在大多系统都是前后端分离的项目,前端和后端的进度可能不一样,那为了尽早的进入测试,前端界面没有开发完成的情况下,只要后端的接口开发完了,就可以提前做接口测试了; (2)基于安全考虑,只依赖前端进行限制,已经完全不满足系统的安全性…

电商卖家怎么快速采集复制1688全店宝贝到自己店铺?淘/猫/拼/抖都适用!

1688上面的货源品类丰富&#xff0c;很多卖家都是在这里找厂家&#xff0c;当我们找好厂家后&#xff0c;怎么将厂家店铺里所有宝贝都复制到自己店铺呢&#xff1f; 虽然1688平台本身支持铺货到其他平台&#xff0c;但一个个铺货太耗费时间了。 阿里巴巴中国站获得1688商品详…

【AI大模型RAG】深入探索检索增强生成(RAG)技术

目录 1. 引言2. RAG技术概述2.1 RAG技术的定义2.2 RAG技术的工作原理2.3 RAG技术的优势2.4 RAG技术的应用场景 3. RAG的工作流程3.1 输入处理3.2 索引建立3.3 信息检索3.4 文档生成3.5 融合与优化 4. RAG范式的演变4.1 初级 RAG 模型4.2 高级 RAG 模型4.3 模块化 RAG 模型优化技…

会计报表分析

目录 一. 会计报表的种类 \quad 一. 会计报表的种类 \quad 反应财务状况的是资产负债表 反应经营成果的是利润表 有时间点的就是静态表 动态表就是有一个区间的, 比如一年, 一个季度等

探索这些有趣的API,让你的应用与众不同

在这个由数据驱动的时代&#xff0c;我们每天都在与各种应用程序和服务互动&#xff0c;却很少意识到它们背后的技术奇迹。API&#xff0c;作为这些互动的幕后英雄&#xff0c;不仅简化了开发过程&#xff0c;还扩展了技术的边界。有趣的API&#xff0c;特别是那些能够激发创新…

HTTP协议和Nginx

一、HTTP协议和Nginx 1.套接字Socket 套接字Socket是进程间通信IPC的一种实现&#xff0c;允许位于不同主机&#xff08;或同一主机&#xff09;上不同进程之间进行通信和数据交换&#xff0c;SocketAPI出现于1983年BSD4.2实现在建立通信连接的每一端&#xff0c;进程间的传输…

理解MySQL核心技术:外键的概念、作用和应用实例

引言 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;外键&#xff08;Foreign Key&#xff09;是维持数据一致性和实现数据完整性的重要工具。本文将详细介绍MySQL外键的基本概念、作用&#xff0c;以及相关的操作指南和应用实例&#xff0c;帮助读者掌握并灵活…

深入了解PHP的If...Else语句

PHP是目前最流行的服务器端编程语言之一&#xff0c;用于开发动态和交互式网站。在PHP编程中&#xff0c;控制结构是非常重要的概念&#xff0c;它们决定了代码的执行流程。其中&#xff0c;if…else语句是最常用的控制结构之一。本文将深入介绍PHP中的if…else语句&#xff0c…

算子级血缘和血缘查询管理

数据链路 血缘关系 应用场景&#xff1a;数据资产&#xff0c;数据开发&#xff0c;数据治理&#xff0c;数据安全等等 &#xff08;绿色箭头上面是数据治理&#xff09; 场景&#xff1a; 数据链路的高效盘点与理解 数仓模型的长效优化机制 风险影响的及时全面分析 重复…

Android Studio无法正确引入包内存在的类

Android Studio 无法识别同一个 package 里的类&#xff0c;显示为红色&#xff0c;但是 compile 没有问题。 重启&#xff0c;rebuild,clean都没有用。 多半是因为 Android Studio 之前发生了错误&#xff0c;某些 setting 出了问题。 解决方法如下&#xff1a; 点击菜单中的…

6月27日-四象限法则

四象限法则&#xff0c;又称为艾森豪威尔矩阵&#xff08;Eisenhower Matrix&#xff09;&#xff0c;是一种时间管理和任务优先级排序的方法。它将任务分为四个象限&#xff0c;帮助个人识别哪些任务最重要&#xff0c;哪些可以推迟或委托&#xff0c;以及哪些可以完全忽略。以…