【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 = 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.mfbz.cn/a/749390.html

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

相关文章

阿里巴巴向国际用户开放人工智能模型平台ModelScope(魔搭社区)

阿里巴巴对 Hugging Face 和 Amazon Bedrock 的回应包含 5,000 多个中国专业模型&#xff0c;以及 1,500 个工具包和数据集 阿里云已将其人工智能模型存储库ModelScope&#xff08;魔搭社区&#xff09;的访问权限扩展至全球英语用户&#xff0c;意在吸引更多国际企业和开发者…

床旁交互,全视通打造以患者为中心的智慧病房

随着我国医疗建设的发展&#xff0c;医疗服务体系的不断建立健全&#xff0c;新形势下人们的医疗需求发生变化&#xff0c;医疗服务理念正逐步从传统的“以疾病为中心”向“以患者为中心”转变。 基于医院临床实际应用场景&#xff0c;在兼具实用性的前提下&#xff0c;建设了床…

yolov5驾驶员不规范行为检测

1 项目介绍 1.1 摘要 随着汽车工业的迅速发展和交通拥堵的加剧&#xff0c;驾驶员在行车过程中的不规范行为成为了导致交通事故频发的重要因素之一。为了减少交通事故的发生&#xff0c;保障道路安全&#xff0c;提高驾驶员的行车安全意识&#xff0c;本研究致力于实现驾驶员…

德国威步的技术演进之路(上):从软件保护到用户体验提升

德国威步自1989年成立以来一直专注于数字安全技术的研究和发展&#xff0c;在软件保护和数字授权领域树立了行业标杆&#xff0c;并在云端许可管理和物联网安全技术方面不断创新。德国威步的成就彰显了其对安全、创新和可持续发展的坚定追求。 德国威步将“完美保护、完美授权…

webpack+webpack server入门

​ 1.webpack介绍 webpack是一个模块加载器兼打包工具。它是以 commonJS 的形式来书写脚本的&#xff0c;但对 AMD/CMD 的支持也很全面&#xff0c;方便旧项目进行代码迁移。支持对react热插拔。 2.安装&#xff08;使用淘宝镜像&#xff09; 全局安装 cnpm install webpa…

Redis-数据类型-Set(不允许重复)

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到2数据库4、给key指定的set集合中存入数据&#xff0c;set会自动去重5、返回可以指定的set集合中所有的元素6、返回集合中元素的数量(set cardinality)7、检查当前指定member是否是集合中的元素8、从集合中删除元素…

数学类-课程资料推荐-中科大教师首页

http://staff.ustc.edu.cn/~rui/cn/rui-course.html 数学分析讲义&#xff08;第一册&#xff09; (ustc.edu.cn)

BIO、NIO编程深入理解与直接内存、零拷贝

网路编程基本常识 一. Socket 什么是Socket Socket是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。它提供了应用层进程利用网络协议交换数据的机制&#xff0c;是应用程序与网络协议栈进行交互的接口。 说白了&#xff0c;Socket就是把TCP/IP协议族进行封装…

数通云网架构师涨薪班毕业都有哪些工作企业和岗位?

数通云网架构师涨薪班课程学完后&#xff0c;学员具备全行业全场景交付数通项目的能力&#xff0c;胜任企业网&#xff0c;广域网&#xff0c;数据中心网络等各种网络项目的交付能力&#xff0c;技术能力一项能够匹配年薪达30w-40w以上网络工程师岗位。 与誉天进行人才培养&…

Wordpress图像编辑插件-palleon v3.8.1中文版语言包

Palleon是一个强大的WordPress图像编辑器&#xff0c;可以与您的WordPress网站无缝集成&#xff0c;让您快速高效地工作。它拥有为你的WordPress网站创建令人惊叹的图像所需的一切。 Palleon让您完全控制图像&#xff0c;允许您逐个像素进行更改。您可以轻松地裁剪、调整图像大…

Android jetpack Room的简单使用

文章目录 项目添加ksp插件添加 room 引用开始使用room1. 创建bean2. 创建 dao类3. 创建database类 数据库升级复制数据库到指定路径参考文献 项目添加ksp插件 注意&#xff0c;因为ksp插件 是跟项目中使用的kotlin的版本要保持一致的&#xff0c;否则会报错的 首先我们去 https…

高德.js2.0绘制多条折线(轨迹)及清除所有折线

2.0版本的地图,需要绘制多条折线的时候,就需要循环生成,因此也需要循环清除 for (let j 0; j < combinedArray.length; j) {const item combinedArray[j];this.polyline new AMap.Polyline({map: this.map,path: item,showDir: true,strokeColor: "#28F", //线…

免费Logo在线生成:必试的6款工具

logo对企业来说非常重要。一个好的logo免费设计在线生成器往往会给企业带来无形的利润。因此&#xff0c;许多企业非常重视自己公司的logo。作为一名设计师&#xff0c;如果能找到一个好的logo免费设计在线生成器&#xff0c;势必会给实际的logo设计带来事半功倍的效果。本文精…

软件测试面试题:Web View如何测试?

Web View介绍 Web View&#xff08;网页视图&#xff09;是一种用于在应用程序中显示网页内容的组件或控件。提供了一种将网页内容嵌入到应用程序中的方式&#xff0c;使用户能够在应用程序中浏览和交互网页。 Web View通常用于开发移动应用程序&#xff0c;特别是混合应用程…

Docker构建多平台镜像

docker的多架构镜像构建 目前很多服务器都是基于arm架构的&#xff0c;而现在大多数的docker镜像都是基于x86架构的。一种情况就是同样的代码编译成业务包做成镜像需要部署在不同架构的服务器上&#xff0c;这个时候我们就可以使用docker的多平台构建了。 以下操作是在centos7.…

Github 2024-06-21 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Python项目3Java项目2非开发语言项目2JavaScript项目1Rust项目1Dart项目1HTML项目1Vue项目1C++项目1TensorFlow: 机器学习的开源…

软件自动化测试有哪些流程?可替代手工测试吗?

随着科技的不断发展&#xff0c;软件在我们生活中的地位越来越重要。然而&#xff0c;在软件开发过程中&#xff0c;必然会出现各种各样的问题和bug&#xff0c;为了提高软件的质量和稳定性&#xff0c;保证用户的使用体验&#xff0c;软件自动化测试应运而生。 那么&#xff…

什么是 Azure OpenAI?

目录 一、说明 二、什么是 Azure OpenAI 2.1 网络结构 2.2 、为什么使用 Azure OpenAI 2.3 如何使用 Azure OpenAI 三、从哪里开始 Azure OpenAI 之旅 3.1 关于 Azure OpenAI&#xff0c;我还需要了解什么 3.2 RBAC 权限和角色 3.3 演示 1&#xff1a;在公共数据上应用…

OpenAI封锁中国?国产大模型开启价格战?收好这份LLM选购指南,带你搞定极致性价比 | ShowMeAI

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; 1. Cloud LLM capability, cost, performance | 一份开发者最实用的大模型「性价比」计算手册 这是 Harlan Lewis 整理的大语言模型 (LLM) 对比清单…

深入浅出:npm常用命令详解与实战

theme: smartblue npm是什么 npm&#xff08;Node Package Manager&#xff09;是Node.js平台的默认包管理器&#xff0c;它让JavaScript开发者能够轻松地共享、管理和使用彼此编写的代码模块。npm不仅仅是一个安装工具&#xff0c;它还是一个全面的生态系统&#xff0c;用于发…