Redis

Redis7系列:Redis对决RedisStack Redis 是一个开源的内存数据库,以高性能、低延迟著称,支持基础数据结构(如字符串、哈希、列表、集合、有序集合等),常用于缓存、消息队列、实时数据处理等场景。Redis Stack 是 Redis 的扩展版本,整合了 Redis 核心数据库与多个高级功能模块(如全文搜索、JSON 文档存储、图数据库、时间序列等),提供“一站式”解决方案,简化了复杂数据场景的开发。 阅读详情

转载

一、简介

redis就是一个数据库,不过是在内存中的,存取速度快,被广泛用于缓存,分布式锁,支持事务,集群。
高性能,高并发。

1.1 为什么用redis

缓存分为本地缓存和分布式缓存,以java为例,使用自带的map或者guava实现的是本地缓存,最主要特点是轻量和快速,声明周期随着jvm的销毁而结束。
redis或memcached被称为分布式缓存,缓存具有一致性,缺点是要保持redis或memcached服务的高可用,程序架构上比较复杂。

1.2 redis与memcached区别

  1. redis支持更丰富的数据类型,k/v,list,set,zset,hash。memcache支持简单的数据类型,String.
  2. Redis支持数据的持久化,将内存中的数据保存再磁盘中,重启的时候可以再次加载使用,Memcached把数据全部存在内存中
  3. 集群模式,redis目前是原生支持cluster模式。
  4. Memcached是多线程,非阻塞IO复用的网络模型,Redis使用单线程的多路IO复用模型

1.3 redis设置过期时间

数据过期后,如何删除数据
定期删除+惰性删除
默认每隔100ms随机抽取一些设置了过期时间的key,检查是否过期,过期则删除
当系统查到key到期了,删除

1.4 redis 内存淘汰机制

大量key堆积在内存里导致内存块耗尽

  • volatile-lru: 从已设置过期时间的数据集中挑最近最少使用的数据淘汰
  • volatile-ttl: 从已设置过期时间的数据集中挑选将要过期的数据淘汰
  • volatile-random: 从已设置过期数据的数据集中任意选择数据淘汰
  • allkeys-lru: 当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(最常使用)
  • allkeys-random: 从数据集中任意选择数据淘汰
  • no-eviction: 禁止驱逐数据,当内存不足禁止写入数据

1.5 redis 持久化机制

快照(snapshotting)持久化(RDB)

Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis主从结构,主要用来提高Redis性能),还可以将快照留在原地以便重启服务器的时候使用
快照持久化是Redis默认采用的持久化方式

追加文件(append-only file)

开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof。
在Redis的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:

appendfsync always     #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
appendfsync everysec  #每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no      #让操作系统决定何时进行同步

1.6 缓存雪崩和缓存穿透问题解决方案

缓存雪崩

缓存同一时间大面积失效,后面的请求落在数据库上,造成数据库短时间内承受大量请求而崩掉

  • 事前:尽量保证整个redis集群的高可用性,发现机器宕机尽快补上,选择合适的内存淘汰策略
  • 事中: 本地缓存,限流+降级,避免MySQL崩掉
  • 事后: 利用redis持久化机制保存的数据尽快恢复

缓存穿透

一般是黑客故意去请求缓存中不存在的数据, 导致所有请求都落在数据库上

  • 一般是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个拦截,从而避免对底层存储系统的查询压力
  • 简单粗暴,如果一个查询返回的数据为空,我们仍然将这个空结果缓存,过期时间很短,不超过五分钟。

1.7 如何解决redis的并发竞争Key问题

多个系统同时对一个key进行操作,但是执行顺序和我们期望的不同
分布式锁(zookeeper和redis度可以实现分布式锁)
分布式锁

1.8 如何保证缓存与数据库双写时的数据一致性

一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况
串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。

二、数据结构

String

set,get,decr,incr
简单的key-value类型

set key value
get key
del key
mset key1 value1 key2 value2
mget key1 key2
expire key1 5 # 5秒后过期
setex key2 5 value2
setnx name value # 不存在就创建
set age 30
incr age
incrby age 5
incrby age -5

Hash

hget,hset

hset maps java "think in java" # valu如果包含空格,需要引号
hgetall maps # 获取key,value
hlen maps
hget maps java
hmset maps java "v1" python "v2"

类似于java的hashMap

List

lpush,rpush,lpop,rpop,lrange
链表,应用场景很多,双向链表,反向查找,遍历

rpush books python java golang # 3个元素
llen books
lpop books
rpop books
rpush books value
ltrim books startindex endindex # -1表示倒数第一个

Set

sadd,spop,smembers

sadd books python
smembers books # 无序
sismember books java# 查看是否存在
scard books # 获取长度
spop books # 弹出一个

类似于列表的功能,特殊之处在于set是可以自动排重的

Sorted Set

zadd,zrange,zrem,zcard

zadd books 9.0 "a"
zadd books 8.0 "b"
zrange books 0 -1 # 按score排序从小到大输出
zcard books # 长度
zrangebyscore books 0 8.0 # 根据区间输出 后面可以加 withscores

比set增加了权重参数score,使得集合中的元素能够按score进行有序排列

三

3.1 位图

redis提供了位图数据结构,可以自动拓展
可以支持零整存取操作

setbit w 1 1
getbit w 1 1
set w h
get w
bitcount 统计指定位置范围1的个数 [start, end]
bitpos 用来查找指定范围内出现的第一个0或1

3.2 HyperLogLog统计UV

Redis提供的用于不精确的去重技术方案,标准误差0.81%。一个log需要占据12k的存储空间,所以不适合统计单个用户的相关数据。
原理:给定一系列的随机整数,我们记录下低位连续零位的最大长度 k,通 过这个 k 值可以估算出随机数的数量

pfadd 增加计数
pfcount 获取计数

3.3 布隆过滤器-推荐去重

布隆过滤器能准确过滤掉那些已经看过的内容,那些没有看过 的新内容,它也会过滤掉极小一部分 (误判),但是绝大多数新内容它都能准确识别。这样就 可以完全保证推荐给用户的内容都是无重复的。原理就是使用位图和几个无偏哈希函数,本质上就是取哈希,如果哈希冲突就认为重合,所以存在误判。

bf.add codehole user1
bf.exists codehole user2

3.4 限流-断尾求生

1 简单实现

zset加上时间窗口

2 漏斗限流

redis-cell模块

cl.throttle laoqian:reply 15 30 60 1
laoqian:reply : key
初始容量为15 频率行为60s最多30次,1是可选参数默认值为1

3.4 进水楼台-GeoHash

GeoHash算法,将二维经纬度映射到一维。
Geo内部就是一个普通的zset结构

geoadd company 116.43 39.99 juejin
geodist company a b km
geopos company juejin
geohash company juejin # 获取哈希编码
georadiusbymember company juejin 20 km count 3 asc #获取最近公司
georadius company 116.5345 39.434 20 km withdist count 3 asc 根据经纬度

3.5 大海捞针-sacn

  1. keys算法可以支持正则匹配所有key keys codehole*
  2. sacn 0 match key99* count 10 // count表示单次遍历的槽数
  3. //0表示游标,服务器不记住寻找的状态
【Redis】Redis入门 redis入门基础、Linux下安装redis 阅读详情

相关推荐

Redis Redis介绍、安装 - Redis客户端

目录redis是什么,他的应用场景是什么?Redis的一些主要特点和应用场景:redis的官方网站:Redisredis是键值型数据库:(也就是key-value模式)(跟python的字典很像)认识NoSQL?SQL和NoSQL的区别数据库结构之间的区别数据库关联之间的区别SQL查询和非SQL查询的区别事务上的差异总结认识Redis特征:一、安装Redis1、单机安装Redis(linux安装 – Centos7.9)1.1、安装Redis依赖(Redis是基于C语言编译的,因此首先需要安装Redis所需

m0_51274464的博客 1534

Redis(5) Redis持久化操作超详细讲解!!

一、RDB 是指在时间间隔内将内存中的数据集快照写入磁盘。Redis会单独创建一个子进程来进行持久化,会先将数据写入一个临时文件中,待持久化都结束了,再用这个临时文件替换上一次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模的数据恢复,且对于恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加高效,RDB的缺点是最后一次持久化后的数据可能会丢失 ...

Jjs_Object的博客 1037

【Redis】Redis基础——Redis的安装及启动

GitHub上的大神编写了Redis的图形化桌面客户端,不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。# 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,因为之前配置了密码,因此需要通过 -u 来指定密码。当然,在连接redis时指定密码,还能连接后使用 AUTH 指定用户名和密码,这里我没有用户名,直接指定密码就好了。2. 修改redis.conf文件中的一些配置,进入后,输入/,在输入内容回车就能搜索到了。

菜鸟的博客 4527

【Redis】AOF日志的三种写回机制

redis的AOF(Append Only File)持久化提供了三种不同的写回策略,通过appendfsync配置项来控制,这三种策略在数据安全性和性能之间提供了不同的权衡选择。3、主线程不阻塞,后台线程每秒检查一次缓冲区,缓冲区有数据就执行fsync()同步到磁盘。1、每次写入命令后立即执行fsync,将数据同步到磁盘。2、确保每个写命令都持久化到磁盘后才返回成功响应。3、立即调用fsync()将缓冲区内容写入磁盘。2、命令追加到AOF缓冲区。2、命令追加到AOF缓冲区。2、命令追加到AOF缓冲区。

qq_45795794的博客 909

SAP销售订单POD实操:从VL01N创建到VLPOD差异处理,保姆级避坑指南

本文详细解析SAP销售订单POD全流程,从VL01N创建到VLPOD差异处理,提供保姆级避坑指南。涵盖核心业务逻辑、前置配置、销售订单创建、交货单处理及差异解决方案,帮助用户高效管理供应链执行环节,确保财务与物流的准确对接。

weixin_27219587的博客 622

PFC中pb模型实战:从胶结参数设置到破坏模拟全流程解析

本文详细解析了PFC软件中平行胶结模型(PB模型)的实战应用全流程。从胶结参数(pb_kn, pb_ks, pb_ten等)的物理意义与精准赋值入手,深入探讨了模型构建、胶结施加以避免初始损伤的技巧,并系统介绍了破坏过程的监测、阈值判定方法以及高级可视化与常见问题诊断。旨在帮助岩土工程与颗粒材料研究者掌握从参数调试到破坏模拟的核心操作,提升数值模拟的准确性与效率。

php55的博客 1074

Redis的appendfsync参数详解

redis.conf中的appendfysnc是对redis性能有重要影响的参数之一。可取三种值:always、everysec和no。 设置为always时,会极大消弱Redis的性能,因为这种模式下每次write后都会调用fsync(Linux为调用fdatasync)。 如果设置为no,则write后不会有fsync调用,由操作系统自动调度刷磁盘,性能是最好的。 everysec为最多...

一见 1万+

linux入侵排查-综合日志分析

2.分析攻击者首次成功登录web管理后台的时间 还可以知道攻击者可能是通过10.2.4.11这个跳板服务器跳过来的,然后我们继续排查,可以发现日志中POST请求大多都是1047字节,然后往后大多是300字节,POST请求的响应状态码有200和302这两个,其中的302是爆破成功后持续爆破产生的日志,再1047字节和300字节中间夹着一个978字节,就是200响应和302响应的中间。7.分析攻击者留下的持久化后门的时间和后门执行情况 排查计划任务,发现有一个计划任务还是被加密的,应该是反弹shell的。

chinese_cabbage0的博客 642

Redis持久化机制

一、Redis持久化机制介绍 RDB和AOF两种持久化机制的介绍: redis持久化:RDB,AOF 1)、RDB持久化机制,对redis中的数据进行周期性的持久化。 2)、AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF日志中的写入指令来重新构建整个数据集。 3)、通过RDB或AOF,都可以将redis内存中的数据给持久化到磁盘上,然后可以将这些数据备份到别的地方,比如说阿里云,华为云等云服务。此时如果redis挂了,服务器上的

weixin_38910645的博客 329

SpringBoot不用三方框架,怎么动态调度定时任务,ScheduledExecutorService 详解

Spring Boot 提供了强大的定时任务支持,无需依赖任何第三方框架,即可轻松实现可配置的定时任务。通过使用 `@EnableScheduling` 注解启用定时任务支持后,我们可以利用 `@Scheduled` 注解来定义定时任务的方法,这些方法可以在指定的时间间隔或特定时间点自动执行。 我们还可以通过集成 `ScheduledExecutorService` 来实现灵活的定时任务管理。`ScheduledExecutorService` 是 Java 标准库的一部分,能够以固定速率或延迟执行任务,

横竖撇折点 1937

Abaqus中Cohesive单元建模:从本构到失效的完整指南

本文提供了Abaqus中Cohesive单元建模的完整指南,涵盖从本构模型到失效分析的全过程。详细解析了Cohesive单元作为模拟界面粘结与失效的关键工具,其核心在于弹性本构、损伤起始准则和损伤演化定律的设置。文章通过双悬臂梁(DCB)实例,手把手指导前处理、材料定义、求解设置及后处理分析,并分享了刚度、强度、断裂能等关键参数的影响与收敛性调优的实用避坑技巧,帮助用户准确模拟复合材料及胶接结构的界面失效行为。

cuda7parallel的博客 700

修改redis中AOF备份方式

启用AOF命令: config set appendonly yes 之后将两个conf文件中的appendonly处改为yes ,否则当redis服务重启时将会appendonly改回no 如下图示: 然后再执行config set appendfsync always 命令(为了保证不丢失数据,appendfsync always是最安全的。) #每次有新命令追加到 AOF 文件时就执行一次 ...

u011265702的博客 729

STM32 TIM3硬件XOR+复位模式实现霍尔信号精准捕获

霍尔传感器是电机控制系统中获取转子位置的关键器件,其三路数字信号需通过高精度、低延迟的边沿检测机制转换为电角度信息。其核心原理在于利用定时器输入XOR逻辑合并多路信号,并结合从模式复位(Reset Mode)实现硬件级时间间隔测量——每次跳变强制计数器清零,使CNT值直接表征换相周期。该方案规避了软件轮询的不确定性,显著提升FOC控制的实时性与鲁棒性。典型应用场景包括BLDC/FOC电机驱动、机器人关节伺服及工业变频器设计,尤其适用于STM32F4系列等具备硬件XOR与从模式控制器的MCU平台。

weixin_28931507的博客 88

Redis(Redis基础,SpringCache,SpringDataRedis)

本文详细讲解了redis基础内容,以及Spring Cache,Spring Data Redis技术的使用

qq_49474843的博客 2940

工业激光器核心参数详解与选型实战:从理论到产线落地(五)

本文深入解析了脉冲激光加工的三大核心参数——脉宽、重复频率和脉冲能量的协同作用机制。通过公式推导和产线案例,揭示了参数设置对加工良率的关键影响:1. 脉宽决定热影响区大小,缩短脉宽可显著提升加工精度;2. 重复频率影响加工速度和热积累效应,需平衡效率与质量;3. 脉冲能量决定材料去除量,过大易导致加工缺陷。文中以ABS塑料打标、模具清洗和微孔钻孔为例,展示了参数优化如何将良率从65%提升至99%,并提供了不同应用场景的参数选型表和调试技巧,强调峰值功率比平均功率更具决定性作用。

weixin_44520581的博客 2421

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Redis】初识 Redis

本期内容主要介绍Redis是什么,认识 Redis,介绍 Redis 的特性以及 Redis 为什么快,并简单介绍了分布式系统。

爱编程爱运动的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Redis】Redis键值存储

首先要强调一点:Redis是key value类型的数据库,Redis所说的数据类型都是key value中的value的数据结构,而key都是字符串。在本文中,我们对Redis的键值存储进行了全面的概述和介绍。首先,我们了解了Redis的五大基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和Zset(有序集合),并探讨了它们各自的特点和用法。

白晨的博客 2237

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Redis】Redis的启航之路:Ubantu操作系统下安装Redis

【Redis安装与配置指南】本文详细介绍了Redis数据库的安装步骤:通过apt获取安装包(Y确认安装),用netstat验证服务启动(默认6379端口)。重点讲解了配置文件修改:将IP从127.0.0.1改为0.0.0.0、关闭保护模式以允许远程连接,并重启服务生效。最后演示了使用redis-cli客户端连接服务器及ping测试连通性(返回PONG即成功)。全文提供完整命令行操作指引,适合Redis初学者快速搭建环境。

GGBond778的博客 1968

Redis——Redis简介

Redis简介、Reids5新特性、基本数据类型:String、Hash、List、Set、Sorted Set、Redis HyperLogLog

码说芯语的博客 5571

【Redis】贰 —— Redis基本命令

本文对于Redis中的一些命令进行了介绍以及使用案例

2401_86777036的博客 3080

Redis:初识Redis

介绍了Redis的基本概念,在软件开发中的定位,以及安装方式

博客网站 https://async-area.com 2058

Linux安装Redis以及Redis三种启动方式

也就是上面我们说的,窗口要一直打开。后台进程启动搞完之后,以后开启redis后,就可以去进行其他操作了(在src目录下 ./redis-server /opt/soft/redis-4.0.6/redis.conf启动redis)。此时Redis服务已经可以成功启动了,但是小问题来了,界面一直停留在Redis服务窗口中,按ctrl+c虽然可以屏蔽服务窗口,但是也会结束Redis服务。./redis-server代表要启动redis,后面一串代码进入redis.conf来开启redis,就是路径。

m0_74825466的博客 3810

[redis系列] redis脚本

Redis Lua 脚本功能使得用户能够在 Redis 服务器端执行自定义的 Lua 脚本,从而实现更高效、更灵活的数据操作。Lua 脚本运行在 Redis 服务器内部,这意味着你可以减少客户端与服务器之间的通信开销,并且可以通过原子操作确保多个 Redis 命令的执行一致性。组合功能:Lua 脚本能够将 Redis 中的简单命令组合起来,从而实现复杂的业务需求,避免多次网络往返。数据操作原子性:通过 Lua 脚本,开发者可以在 Redis 中执行应用程序逻辑,对多个键进行条件更新。

深耕后端、偏爱架构,用代码与设计构建可靠系统 1675

Redis重大版本整理(Redis2.6-Redis7.0)

Redis借鉴了Linux操做系统对于版本号的命名规则:node 版本号第二位若是是奇数,则为非稳定版本(例如2.7、2.9、3.1),若是是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。 当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本,因此咱们在生产环境一般选取偶数版本的Redis。 下面是重大版本新功能的归纳: Redis6.0 多线程 IO(Threaded I/O) 众多新模块(modules)API 更好的过期循环(expire cycle) 支持SS

耕云者~ 1万+
上一篇: 深入理解JVM三:虚拟机执行子系统
下一篇: 为什么使用超算中心服务器单节点多GPU训练反而更慢
张小飘
博客等级 码龄11年 9粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值