【Redis一】Redis配置与优化

news2024/11/24 12:39:21

目录

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

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 = 2048
 
sysctl -p
 
 
//安装redis
yum install -y gcc gcc-c++ make

cd /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-server
 
netstat -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 value
 
get:获取数据,命令格式为 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.coloradmin.cn/o/1869052.html

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

相关文章

服务治理怎么做:降级、熔断、全链路压测

服务降级的常见场景 系统负载过高&#xff1a;在高峰期或者流量激增的情况下&#xff0c;为了防止系统崩溃&#xff0c;可以暂时关闭或降低某些非关键服务的质量。 依赖服务故障&#xff1a;当某个依赖服务不可用时&#xff0c;通过服务降级可以提供替代方案或者简化的功能&am…

Java鲜花下单预约系统源码小程序源码

让美好触手可及 &#x1f338;一、开启鲜花新篇章 在繁忙的都市生活中&#xff0c;我们总是渴望那一抹清新与美好。鲜花&#xff0c;作为大自然的馈赠&#xff0c;总能给我们带来无尽的惊喜与愉悦。但你是否曾因为工作繁忙、时间紧张而错过了亲自挑选鲜花的机会&#xff1f;今…

基于Boost和平均电流控制方法的APFC电路设计

通过学习无线充电相关知识&#xff0c;为更快熟悉APFC工作原理&#xff0c;通过实验得以掌握 技术要求&#xff1a; 1&#xff09;输入电压&#xff1a;AC 85V&#xff5e;265V&#xff1b; 2&#xff09;输出电压&#xff1a;400V1%&#xff1b; 3&#xff09;输出额定电流…

grpc学习golang版( 五、多proto文件示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文件2.3 人脸唤醒proto文件2.4 生成go代码2.…

MapStruct-JavaBean映射工具使用指南

在软件开发中&#xff0c;对象之间的转换是一项常见的任务&#xff0c;尤其是在处理数据模型间的映射时。传统的做法&#xff0c;如使用JavaBeanUtils&#xff0c;可能会导致性能下降&#xff0c;而手动编写转换代码则效率低下且易出错。为了解决这些问题&#xff0c;MapStruct…

GPU_Gems-物理模型的水模拟

创建一个多网格的平面 void GraphicsWindowBase::RenderPlane() {constexpr int width 150;constexpr int depth 150;constexpr int vertNum width * depth;float length 60.f;if (quadVAO 0){float planeVert[vertNum * 5];float offsetX length / (width - 1.f);float…

低空经济再获新动能!沃飞长空完成新一轮数亿元融资

当下&#xff0c;作为中国"新质生产力"代表的低空经济正在成为新的发展“风口”&#xff0c;全国各地开足马力加速入场。 低空经济有多“火”&#xff1f;政策方面&#xff0c;据不完全统计&#xff0c;已有26个省份的政府工作报告对发展低空经济作出部署&#xff1…

Mysql需要知道的点

目录 一、数据库的三范式是什么 二、Mysql数据库引擎有哪些 三、说说Innodb与MYISAM的区别 四、数据库的事务 五、索引是什么 六、优化手段有哪些 七、简单说一说 drop&#xff0c;delete与truncate的区别 八、什么是视图 九、什么是内连接、左外连接、右外连接&#x…

mysql中in参数过多优化

优化方式概述 未优化前 SELECT * FROM rb_product rb where sku in(1022044,1009786)方案2示例 public static void main(String[] args) {//往list里面设置3000个值List<String> list new ArrayList<>();for (int i 0; i < 3000; i) {list.add(""…

知识图谱介绍及其应用领域分析

1.知识图谱 知识图谱(Knowledge Graph)乃一种精心设计的技术,旨在储存并整合交织的描述性知识信息。此技术通过构建由实体及其相互关系所组成的网络结构,实现对知识的有序组织与呈现。这些实体涵盖广泛的范畴,包括但不限于具体的物体、事件或抽象概念,它们经由多样化的关…

​​植物大战僵尸杂交版直装版v2.1 安卓版:全新策略塔防体验

《植物大战僵尸杂交版直装版》v2.1是由B站UP主“潜艇伟伟迷”精心制作的同人游戏&#xff0c;为策略塔防手游带来了全新的活力。游戏中引入了众多创新的杂交植物&#xff0c;例如结合了向日葵的阳光生成能力和豌豆射手的攻击特性的向日葵豌豆射手&#xff0c;以及拥有寒冰豌豆射…

2024平价蓝牙耳机推荐哪款?百元左右平价蓝牙耳机推荐

在2024的无线耳机市场中&#xff0c;蓝牙耳机已经成为了主流。无论是对于音乐爱好者还是普通消费者&#xff0c;选择一款音质出色、舒适度高且功能齐全的蓝牙耳机还是很重要的。一款好的蓝牙耳机不仅戴在耳朵上很舒服&#xff0c;而且音质还没有任何的杂音&#xff0c;但现在的…

uniapp字体ttf在小程序报错,解决方法

文章目录 导文解决方法1&#xff1a;把字体改成base64格式解决方法2&#xff1a;改成线上模式 导文 报错1&#xff1a; uniapp 小程序报错&#xff1a;app.js错误: Error: Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js): ModuleBuildErro…

【PWN · TcachebinAttack | UAF】[2024CISCN · 华中赛区] note

一道简单的tcache劫持 一、题目 二、思路 存在UAF&#xff0c;libc版本2.31&#xff0c;经典菜单题 1.通过unsorted-bin-attack来leak-libc 2.通过uaf打tcache-bin-attack劫持__free_hook实现getshell 三、EXP from pwn import * context(archamd64,log_leveldebug)ioproce…

Hive-存储-文件格式

一、前言 数据存储是Hive的基础&#xff0c;选择合适的底层数据存储格式&#xff0c;可以在不改变Hql的前提下得到大的性能提升。类似mysql选择适合场景的存储引擎。 Hive支持的存储格式有 文本格式&#xff08;TextFile&#xff09; 二进制序列化文件 &#xff08;SequenceF…

大家都在聊IPD(集成产品开发)?国内IPD体系做的比较好的是哪款项目管理软件?看IBM、华为的研发管理之道!

IPD&#xff08;集成产品开发&#xff09;到底是什么&#xff1f;一套体系&#xff1f;一些流程&#xff1f;还是一种模式&#xff1f; 一、回顾一下&#xff0c;什么是IPD&#xff1f; IPD到底是什么&#xff1f;一套体系&#xff1f;一些流程&#xff1f;还是一种模式&#…

Batch学习及应用案例

一、介绍 Batch是一种Windows操作系统中使用的批处理脚本语言&#xff0c;用于自动化执行一系列命令和操作。通过编写批处理脚本&#xff0c;可以实现自动化完成重复性或繁琐的任务&#xff0c;提高工作效率。 Batch脚本可以使用内置的命令和命令行工具&#xff0c;以及调用其…

学校机器该maven环境

在学校机器上 安装maven配置idea中的maven 后&#xff0c;发现无法运行&#xff0c; 推测是学校电脑上idea版本和我们下的maven 可能不太匹配。 学校的电脑上idea有集成的maven&#xff0c;但默认配置是访问国外的服务器 解决办法&#xff1a; 下载分享给各位同学的压缩包m…

顺序表--数据结构第一关

顺序表 数据结构概念 定义&#xff1a;数据结构是计算机存储、组织数据的⽅式 根据学过C语言的基础上&#xff0c;数组是最简单的数据结构 顺序表的底层就是数组 为什么呢&#xff1f; 例子如下&#xff1a; int arr[100]{1,2,3,4,5}; //修改某一个数据&#xff1a;arr[…

vcruntime140_1.dll是什么东东?vcruntime140_1.dll缺失的8个解决方法

当电脑出现找不到vcruntime140_1.dll,或vcruntime140_1.dll丢失无法打开软件怎么办&#xff1f;小编今天在本文详细为大家介绍解决方法与介绍vcruntime140_1.dll究竟是什么等vcruntime140_1.dll的问题。 一、vcruntime140_1.dll文件是什么 文件概述定义与功能 vcruntime140_…