redis使用详解

article/2025/10/25 16:03:14

一.redis简介

redis是开源的BSD许可的高级key/valu存储系统,用于存储String,list,hash,set,zset,常用来提供数据结构服务。

redis与memcached比较
1.redis可以用来做存储storage,memcached只用来做缓存cache,主要redis有持久化功能。
2.数据结构存储:memcached只能存储一种数据结构字符串,redis可以存储字符串,哈希结构,链表,集合,有序集合。

redis bin目录文件
redis-benchmark性能测试工具 
redis-check-aof检查aof日志 
redis-check-dump检查rdb日志
redis-cli连接用客户端
redis-server服务进程

二.redis通用key操作

redis的三个通配符:*通配任意字符,?通配单个字符,[]通配括号内的某个字符

randomkey // 返回随机key。
type key // 返回key存储的值的类型。
exists key // 判断key是否存在。
del key1 key2 ... keyN // 删除一个或者多个key。
rename  key newkey // 重命名key
renamenx key newkey // newkey不存在更新为newKey,newkey存在不做更改。
move key db // db指redis数据库序号,redis默认数据库为16,从0.1...15。
ttl key // 返回key的生命周期(秒数),对于不存在的key,已经过期的key,永久不过期的key都返回-1.redis2.8中,对于不存在的key返回-2。
pttl key  // 以毫秒返回key生命周期。
expire key 整型值 // 设置key的生命周期,以秒为单位。
pexpire key 豪秒数 // 设置以毫秒为生命周期。
persist key // 指定key为永久有效。

三.redis五大数据结构的操作命令不再赘述

位图法统计登录用户
setbit key 100000000 0  // 初始化100000000 位数字(用户数量)为0二进制串
setbit key userId1 1  setbit key userId2 1 ...... setbit key userIdN 1 // 用户登录,置userId位数值为1
bitop and  destKey 周1......周日   // 连续一周登录的用户
bitop or destKey 周1......周日   // 一周内登录过的用户  
bitcount destKey  // 统计destKey 中1的个数

四.redis事务及锁的应用

redis支持简单的事务(不支持回滚)
redis与mysql事务对比

如果成功执行了前2条sql,第3条失败,rollback后前2条sql执行影响消失,discard只是结束本次事务,未执行exec前可以discard取消,已执行exec,前两条sql造成的影响还在,discard无效。

Multi后面的语句中,语句出错可能有两种情况:
1.语法错误,exec是报错,所有语句得不到执行。
2.语法本身没错,适用对象有问题,zadd操作list对象,exec之后会执行正确的语句跳过不正确的语句。

使用redis乐观锁机制订票下单
Watch指令监控key值(多个也可以)是否发生变化,变化不可操作 / unwatch取消监视key
Set ticket 1
Watch ticket
multi  #开启redis事务
Decr ticket #票数减1
Decrby lisi 100 #扣除金额
Exec     #exec执行前ticket值变动,所有操作失败。

五.redis消息发布与订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

publish channel message // 发布消息
subscribe channel // 订阅频道(先开启订阅功能,才能接收到消息)
psubscribe  // 订阅一个或多个符合给定模式的频道。以*作为匹配符, it*以it开头的有频道。

当有新消息通过 publish命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

六.rdb快照持久化

rdb工作原理:每隔N分钟或N次写操作,从内存dump出rdb文件压缩放在备份目录( 其中N,压缩,目录可配)。

Rdb快照相关参数
Save 900 1刷新快照到硬盘,满足900秒之后必须一个关键字发生变化
Save 300 10 300秒之后至少10个关键字发生变化
Save 60 10000 60秒之后10000个关键字发生变化 (上述3项屏蔽,rdb快照被禁用)
stop-writes-on-bgsave-error yes 后台rdb导出出错client停止写操作
rdbcompression yes 对导出文件是否进行压缩
rdbchecksum yes 存储和加载rdb文件时校验
rbfilename dump.rdb 设置rdb文件名
dir ./设置工作目录,rdb文件会写入该目录

redis新老版本比较
老版本采用单进程模式:redis-server接收客户端请求处理,还要进行rdb导出操作,在rdb导出时间段,不会处理客户端请求(防止rdb与内存数据不一致)。
新版本开启子进程进行rdb导出快照,服务进程仍能接收处理客户端的写操作,如果子进程导出rdb快照时出错了,停止服务进程的写入操作。

rdb缺陷:--------|-------------|---------------------------------------------
|代表保存点,在两个保存点之间断电或服务器宕机,将会丢失1-N分钟的数据。
优势:导出整个镜像,恢复速度相当快。

七.AOF持久化

AOF参数配置:
appendonly no #是否打开aof日志功能。
appendfsync always #每一个命令,都立即同步到aof,安全速度慢。
appendfsync everysec #折衷方案,每秒写一次
appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof,同步频率低,速度快
no-appendfsync-on-rewrite yes #正在导出rdb快照的过程中,要不要停止同步aof(yes情况下,不会丢失clent写日志,待rdb结束同一同步到aof文件中)
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时重写
auto-aof-rewrite-min-size 64m #aof文件至少超过64m时重写

aof重写:把内存中的数据逆化成命令,写入到aof日志里,以解决aof日志过大的问题。
1.如 set age 0 经过Incr age ......... incr age 最终age=100,逆化成set age 100,此过程叫aof重写(使用到的参数Auto-aof-rewrite-percentage,Auto-aof-rewrite-min-size配置)。
2.手动重写指令:bgrewriteaof。

rdb与aof比较
rdb和aof都存在,优先使用aof来恢复数据。
rdb比aof恢复速度快,因为其是数据的内存映射,直接载入到内存,但丢失时间段数据。而aof是命令,需要逐条执行redis服务器端命令,丢失数据一秒之内,拖慢请求速度(AOF写磁盘)。

问题思考:rdb有内容,开启aof选项,重启redis,产生了一个aof空文件,aof,rdb都存在优先使用aof,所以以空文件来恢复,所以内存恢复数据时为nil。

八.redis主从复制

集群作用
①主从备份, 防止主机宕机   
②读写分离,分担master的任务 
③任务分离,如从服务分担备份与计算工作


主从通信原理
slave启动后向master自动发起sync同步请求,master则dump出rdb给slave,与此同时master客户端处理的写操作会缓存在内存里的aof队列中,slave再同步缓冲队列中的写命令。


主从(伪集群)配置方案(6379,6380,6381)
创建两个redis6380.conf和redis6381.conf从服务器配置文件分别修改:
slave 6380从服务器配置
pidfile /var/run/redis6380.conf
port 6380
dbfilename dump6380.rdb  #6380服务器开启rdb快照持久化
slaveof localhost 6379
slave-read-only yes
appendonly no 禁用aof日志持久化
masterauth passwd(passwd主服务器设置的密码)

slave 6381从服务器配置
pidfile /var/run/redis6381.conf
port 6381
#save 900 1
#save 300 10
#save 60 3000 禁用rdb
appendonly no 禁用aof日志持久化
slaveof localhost 6379
slave-read-only yes
masterauth passwd(passwd主服务器设置的密码)

master主服务器配置
#save 900 1
#save 300 10
#save 60 3000 禁用rdb
appendonly yes 开启aof日志持久化
Requirepass passwd 开启密码验证(slave连接需要密码, 必须设置masterauth passwd)

主从缺陷:slave断开master(主动断开,网络故障)再连接master,都要master全部dump出来rdb再aof,即同步的过程都要重新执行一遍。所以要记住多台slave不要一下启动起来,否则master可能io剧增。

九.redis运维常用命令

time #查询时间戳和微秒数
dbsize #查看当前库中的key数量
bgrewriteaof #后台进程重写aof
bgsave #后台保存rdb快照(BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。)
save #保存rdb快照(执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘)
lastsave #上次保存时间
slaveof  #设为slave服务器
flushall #清空所有db
flushdb #清空当前db
shutdown[""|save|nosave] #断开连接,关闭服务器
slowlog #显示慢查询
info #显示服务器信息
config get #获取配置信息
config set #设置配置信息
monitor #打开控制台(用于实时打印出 Redis 服务器接收到的命令,调试用)
sync #主从同步
client list #客户端列表
client kill #关闭某个客户端
client setname #为客户端设置名字
client getname #获取客户端名字

十.aof恢复与rdb服务器间迁移

flushall or flushdb危害:若此时重写aof,则aof文件被清空,若又进行了rdb快照,数据无法恢复。
①立马shutdown nosave 断开连接(停止所有客户端,为了防止别人正在写服务器导致aof重写),不要操作aof文件,这条命令不写入aof文件,一般shutdown会重写aof文件。
②vim aof文件,删除flushall或者flushdb。

rdb服务器间迁移步骤
①使用aof文件恢复,同时生成了一个dump.rdb文件,通过save快照内存数据到rdb文件。
②利用dump.rdb文件重命名(注意:需要先kill掉原redis进程,因为在redis进程运行时,rdb处于打开状态,复制的文件占据同样的句柄)。
③启动另一个redis进程,从rdb文件恢复。

十一.缓存穿透与缓存雪崩

缓存穿透:一般的缓存系统,按照key去查询缓存,不存在情况下查询DB数据库,一些恶意的请求会绕过缓存直接从后端数据库中查询,大量的请求对后端系统造成很大的压力。

避免方式:
①空查询进行短时间缓存,等到数据库insert了之后清理缓存。
②利用bitmap对所有可能存在的key进行缓存,查询时通过该bitmap过滤。

缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,请求都会从DB查询数据,会给后端系统带来很大压力,导致系统崩溃。

避免方式:
①读写锁方式处理:对某个key只允许一个线程查询数据和写缓存,其他线程等待。
②二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。
③不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。


http://chatgpt.dhexx.cn/article/yWBQBytR.shtml

相关文章

Redis基本使用!

目录 1.基本概念: 1.Redis的安装和启动 下载 目录结构 3.Redis的命令(重点) Redis数据结构 1.String字符串(重点) 2.Hash哈希(重点) 3.Set集合 4.ZSet集合 通用命令 4.Jedis的基本使用(了解) 相当于JDBC Jedi…

人工智能的几个研究方向

人工智能主要研究内容是:分布式人工智能与多智能主体系统、人工思维模型、知识系统、知识发现与数据挖掘、遗传与演化计算、人工生命、人工智能应用等等。 其中热门研究有以下几种。 一、计算机视觉 就包括图像识别,视频识别,具体应用有人…

学习人工智能可以从事哪些职业,有哪些就业前景和薪资待遇?

学习人工智能可以从事的职业非常广泛,就业前景非常广阔,随着人工智能技术的不断发展和应用,人工智能相关职位的需求将会越来越大。以下是一些主要的职业方向: 学习人工智能可以从事哪些职业,有哪些就业前景和薪资待遇&…

人工智能机器人专业就业前景怎样

在大数据时代,人工智能的相关技术越来越受到关注,人工智能产品的市场话语权也越来越大。因此,许多科技公司已经开始在人工智能领域实施战略布局。人工智能的就业前景如何?让我们来看看吧! 第一:智能化是未来…

学人工智能就业前景怎么样?学AI有前途吗?

学习人工智能已经成为了当前热门的趋势。由于人工智能的技术应用越来越广泛,因此,学习人工智能的前景非常广阔。以下是学习人工智能就业前景的一些解释: 学人工智能就业前景怎么样? 市场需求 近年来,人工智能技术的应…

人工智能行业,就业方向和研究领域的简单介绍

人工智能行业,目前的就业方向,主要分为搜索、图像处理、计算机视觉、模式识别和图像处理等等,具体如下: 搜索方向 :百度、谷歌、微软、yahoo等(包括智能搜索、语音搜索、图片搜索、视频搜索等都是未来的就业…

2022年了人工智能就业前景越来越严峻了,你还在坚持吗?

现在的人工智能只能算是大餐前的甜点,真正的大餐还没开始。所以现在就是好好学习,修炼内容的时候,等到时机成熟,自己的发展也自然会迈上另一个台阶。 像ai作画,之前知乎热搜很难不爱,这个是真的会替代人工…

人工智能就业指南

目录 AI革命进行时 人工智能的未来 人工智能应用于哪些核心产业领域 人工智能领域的拓展对就业的影响 人工智能领域最热门就业机会 人工智能工程师需要做什么 十大AI技能 招聘人工智能专业人员的顶级公司 规划你的AI学习路径 AI革命进行时 过去几年里,数字…

人工智能就业前景如何?

随着5 G、人工智能等技术的发展,人工智能行业的发展趋势也越来越明朗,那么人工智能就业前景如何呢?随着技术的不断发展和成熟,人工智能会带来很多行业变革,我们来了解一下人工智能在各行各业中会有哪些新应用或者新方向…

研究生人工智能就业没烦恼?一文了解研究生AI就业前景

人工智能,现在已被国家列入发展规划,国家提出了人工智能三步走的发展战略,现工智能已经有了国家战略的背景支持。因此,在今后的发展当中,肯定是会越来越火热。 根据领英发布的全球人工智能人才分布显示,中…

学人工智能有前途吗?人工智能前景-AI就业方向

学习人工智能具有非常大的前途。不仅可以获得在市场上有很大需求的技能,还可以涉及到许多领域的应用,同时可以不断学习和发展,拓展个人职业生涯和创业方向。以下是几个方面的解释: 学人工智能有前途吗? 人工智能市场前…

人工智能专业就业有哪些岗位方向

什么是智能科学与技术专业?是制造机器人的吗?就业前景怎么样 什么是智能科学与技术专业?智能科学与技术专业是一个交叉学科,也属于计算机相关的专业,研究方向是人工智能方向。很多人都以为它是制造好了吧!国防都与智能…

人工智能就业前景怎么样?

人工智能再传好消息!第2期学生毕业仅2个工作日,就业率高达50%,最高薪达到24k!平均薪资再创新高,突破19k! 赶紧和播妞一起看看黑马程序员人工智能AI班2期学生的就业佳绩! 部分学生就业薪资展示 …

人工智能值不值得学习?人工智能就业方向及前景

人工智能值不值得学习? 一、人工智能值得学吗? 很多同学想要知道人工智能值得学吗?小编认为是值得的,具体原因有以下两点: 1、人工智能专业前景好,但人才紧缺 根据人工智能行业的专家预计,到2020年&am…

人工智能专业好就业吗?AI就业前景

最近两到三年,可以发现全国各大高效纷纷开设了人工智能AI专业。许多人不知道人工智能毕业可以做什么,人工智能专业好就业吗?AI就业前景怎么样?目前来看人工智能非常符合目前的社会发展需求,这一领域内目前的人才需求量…

人工智能的就业方向有哪些?

关于AI在的就业方向主要有,科研机构(机器人研究所等),软硬件开发人员,高校讲师等,在国内的话就业前景是比较好的,国内产业升级,IT行业的转型工业和机器人和智能机器人以及可穿戴设备的研发将来都是强烈的热…

机器人/人工智能/就业形势2023

机器人/人工智能/就业形势2022 https://blog.csdn.net/ZhangRelay/article/details/124441772 机器人人工智能课程需求和就业趋势-2022- https://blog.csdn.net/ZhangRelay/article/details/127087308 如上已成往事。 2023年如何呢? 之前文章都过于简洁,…

学人工智能好就业吗?可以做什么?AI就业方向及前景

学习人工智能确实是一个非常好的选择,因为AI目前正在快速地发展和应用到各个领域,有很多的就业机会。 学人工智能好就业吗?可以做什么?AI就业方向及前景 AI就业方向包括但不限于以下几个方面: 机器学习工程师&#xf…

人工智能有哪些方向?什么方向有前景?

目前人工智能的技术方向有: 1、计算机视觉——计算机视觉(CV)是指机器感知环境的能力; 2、语音识别——语音识别是指识别语音(说出的语言)并将其转换成对应文本的技术; 3、机器学习——机器学习(ML)是计算机系统为了有效地执行特定任务,不使用明确的指…

人工智能技术应用就业前景和就业方向

1、学习人工智能就业前景怎么样 人工智能的就业前景还是很不错的,人工智能的发展现状处于成长期,国家发布相关政策促进人工智能的发展,一些省份也比较重视人工智能的发展,并提出了相应的规划。 人工智能专业前景怎么样 1人工智能专业就业方向 科研机构(机器人研究所等)、软硬件…