redis的应用

redis应用 在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。前几天我通过这个特性,对学校数据进行了模拟测试,学校数据60万左右,响应时间在700ms左右,比mysql的like查询稍微快一点,但是由于它可以避免大量的数据库io操作,所以总体还是比直接mysql查询更利于系统的性能保障。 阅读详情

1. redis应用场景
2. redis得持久化方式
3. redis得集群

 1. redis应用场景

1、热点数据的缓存 ----
由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据,另外结合 
expire,我们可以设置过期时间然后再进行缓存更新操作,这个功能最为常见。 
2、限时业务的运用
redis中可以使用expire命令设置一个键的生存时间,到时间后redis会删除它。利用这一特性可以运用在限时的优惠活动信息、手机验证码等业务场景。 
3、计数器相关问题
什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景 。 
4、排行榜相关问题
关系型数据库在排行榜方面查询速度普遍偏慢,所以可以借助redis的SortedSet进行热点数据的排序。 在奶茶活动中,我们需要展示各个部门的点赞排行榜, 所以我针对每个部门做了一个SortedSet,然后以用户的openid作为上面的username,以用户的点赞数作为上面的score, 然后针对每个用户做一个hash, 通过zrangebyscore就可以按照点赞数获取排行榜,然后再根据username获取用户的hash信息,这个当时在实际运用中性能体验也蛮不错的。 
5、分布式锁 --Sys---本地锁
在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的细节要更多。 
这个主要利用redis的setnx命令进行,setnx:"set if not exists"就是如果不存在则成功设置缓存同时返回1,否则返回0 ,这个特性在俞你奔远方的后台中有所运用,因为我们服务器是集群的,定时任务可能在两台机器上都会运行,所以在定时任务中首先 通过setnx设置一个lock,如果成功设置则执行,如果没有成功设置,则表明该定时任务已执行。 当然结合具体业务,我们可以给这个 
lock加一个过期时间,比如说30分钟执行一次的定时任务,那么这个过期时间设置为小于30分钟的一个时间 就可以,这个与定时任务的周期以及定时任务执行消耗时间相关。 
当然我们可以将这个特性运用于其他需要分布式锁的场景中,结合过期时间主要是防止死锁的出现。 
6、延时操作---延迟队列
比如在订单生产后我们占用了库存,10分钟后去检验用户是够真正购买,如果没有购买将该单据设置无效,同时还原库存。 由于redis自2.8.0之后版本提供Keyspace Notififications功能,允许客户订阅Pub/Sub频道,以便以某种方式接收影响Redis数据集的事件。 所以我们对于上面的需求就可以用以下解决方案,我们在订单生产时,设置一个key,同时设置10分钟后过期, 我们在后台实现一个监听器,监听key的实效,监听到key失效时将后续逻辑加上。 当然我们也可以利用rabbitmq、activemq等消息中间件的延迟队列服务实现该需求。 
7、分页、模糊搜索 
redis的set集合中提供了一个zrangebylex方法,语法如下: 
ZRANGEBYLEX key min max [LIMIT offffset count] 
通过ZRANGEBYLEX zset - + LIMIT 0 10 可以进行分页数据查询,其中- +表示获取全部数据 
zrangebylex key min max 这个就可以返回字典区间的数据,利用这个特性可以进行模糊查询功能,这个也是目前我在redis中发现的唯一一个支持对存储内容进行模糊查询的特性。 
前几天我通过这个特性,对学校数据进行了模拟测试,学校数据60万左右,响应时间在700ms左右,比mysql的like查询稍微快一点,但是由于它可以避免大量的数据库io操作,所以总体还是比直接mysql查询更利于系统的性能保障。 
8、点赞、好友等相互关系的存储
点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量通常来说比较大,而且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。 又或者在微博应用中,每个用户关注的人存在一个集合中,就很容易实现求两个人的共同好友功能。 
这个在奶茶活动中有运用,就是利用set存储用户之间的点赞关联的,另外在点赞前判断是否点赞过就利用了sismember方法,当时这个接口的响应时间控制在10毫秒内,十分高效。 
9、队列 
由于redis有list push和list pop这样的命令,所以能够很方便的执行队列操作。 
Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。

 2. redis得持久化方式

        2.1        什么是持久化: 把内存中的数据保存到磁盘的过程---就是持久化。防止数据丢失。

        2.2         redis持久化的方式

1.第一种: RDB---快照模式---在一定时间间隔内,对当前redis内存中的数据进行拍照存储。
2.第二种: AOF---日志追加---每次执行的写命令,都会通过一个函数write记录到日志中。

RDB快照储存 

三种方式: save bgsave 通过配置文件

默认保存的文件名称: dump.rdb

        save和bgsave的区别

save模式

该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止

 

执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。  

bgsave模式

执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:

 

 

具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令。

自动触发

        需要指定配置文件---一般不建议改---采用默认值----底层自动执行bgsavev

 

 

rdb数据恢复

只需要把dump.rbd文件放入按照目录,当redis服务启动时,会读取dump.rdb文件 并加载到内存中。  

AOF持久化

 

重启redis配置文件         redis-server redis.conf        (标红文件千万不能删!!)

 

RDB和AOF的优缺点

         RDB:优点        数据恢复速度快。

                    缺点        数据完整性差

        AOF:  优点        数据完整性比较强----最多丢失最后一条写命令

                     缺点        数据恢复速度比较慢---因为它需要把日志文件中所有的命令执行一遍

如果两则同时开启: 默认恢复数据时采用的时AOF.

 3. redis得集群

性能

Redis 本身的QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的Redis 服务来完成工作。

扩展

第二个是出于存储的考虑。因为Redis 所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法。

可用性

第三个是可用性和安全的问题。如果只有一个Redis 服务,一旦服务宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另一个,如果硬件发生故障,而单机的数据无法恢复的话,带来的影响也是灾难性的。

可用性、数据安全、性能都可以通过搭建多个Reids 服务实现。其中有一个是主节点(master),可以有多个从节点(slave)。主从之间通过数据同步,存储完全相同的数据。如果主节点发生故障,则把某个从节点改成主节点,访问新的主节点。

        3.1         第一种集群方式--主从模式

  1. 配置主从模式---配从不配主。

模拟: 一台linux系统,启动三台redis服务.依靠端口号:6380主节点 6381从节点 6382从节点

在redis文件下创建一个 master-slave 文件        并复制三个配置文件

        2 .       修改三个文件的配置  

bind 0.0.0.0 -::1
关闭保护模式        protected-mode no
设置每个文件的端口号        port 6380 | 6381 | 6382
dbfilename dump6380.rdb | dump6381.rdb | dump6382.rdb
appendfilename "appendonly6380.aof"

        启动这三个文件

         三台客户端访问redis相应的服务器

redis-cli -p 6380

redis-cli -p 6381

redis-cli -p 6382

        查看redis的角色        info replication

 

        配置主从关系---从节点        slaveof 主节点ip 主节点port

1. 当从节点断联之后重新连接时、需要重新设置主从关系

2.如果主节点断联,从节点不会自动变为主节点

3.从节点不能进行 写 的操作

4.主节点可以进行 读写 操作

        

第二种集群模式---哨兵模式

 上面的主从模式的缺点:----如果主节点宕机后,从节点无法上位,该redis服务就无法执行写操作了。----哨兵模式。

sentinel.conf 文件

  

 开启哨兵模式        redis-sentinel sentinel.conf

         演示主节点断联

此时变更 6382 为主节点

注意 : 如果之前的主节点恢复连接,自动变为从节点 

第三种模式---集群模式

 哨兵模式的缺点: 它只有一个主节点---如果现在写操作并发高,那么还会导致主节点压力过大。

去中心化

 

 

准备: 6台redis服务。---6个服务中不能有数据。

7001

7002

7003=============主节点

7004

7005

7006=====从节点

修改配置文件: 都需要改

bind 0.0.0.0

port 7001

daemonize yes

# 打开aof 持久化

appendonly yes

# 开启集群

cluster-enabled yes

# 集群的配置文件,该文件自动生成

cluster-config-file nodes-7001.conf

# 集群的超时时间

cluster-node-timeout 5000 847行        当集群某个节点超过这个响应时间,就会自动废除

        启动redis

        为6台redis配置槽以及主从关系  

redis-cli --cluster create --cluster-replicas 1 192.168.32.175:7001 192.168.32.175:7002 192.168.32.175:7003 192.168.32.175:7004 192.168.32.175:7005 192.168.32.175:7006

--cluster-replicas 1        从节点的个数

 

 验证:        redis-cli -c -h 127.0.0.1 -p 7001

 

Redis的15种常用场景 它通过位图(bit array)存储和操作数据,可以高效地处理大量的签到操作,特别适合于需要频繁更新并查询某个用户是否已签到的场景。Redis适合实现用户消息时间线(Timeline)功能.用户消息时间线通常用于展示用户动态、朋友圈、微博等场景,核心需求是按时间顺序存储和展示用户的相关消息或动态。利用 Sorted Set 的 有序性 和 范围查询 特性,将任务的执行时间作为分数(score),任务数据作为成员(member),定时轮询获取到期的任务。每次请求时,移除时间窗口外的旧记录,并添加新记录。 阅读详情

相关推荐

redis:redis Module 、 redis应用、Redis事件机制、redis Stream

Redis 从 4.0 版本开始,支持通过 Module 来扩展其功能以满足特殊的需求。每个人都可以基于 Redis 去定制化开发自己的 Module,比如实现搜索引擎功能、自定义分布式锁和分布式限流。被 Redis 官方推荐的 Module 有:Redis 除了做缓存,还有下面的使用分布式锁:通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下,我们都是基于 Redisson 来实现分布式锁。关于 Redis 实现分布式锁的详细介绍,可以看我写的这篇文章:分布式锁详解。不建议使用 Redis 来

учёба 461

Redis简述|以及它能用于做什么?

Redis是一种开源的NoSQL内存数据库,用于高性能的数据存储和访问。Redis支持多种数据类型,包括字符串、哈希、列表、集合和有序集合,并且支持分布式存储和操作。Redis的特点包括快速、高可用和易扩展等,适用于各种应用场景。Redis作为一款高性能的NoSQL数据库,具有快速、高可用和易扩展等优点,广泛应用于互联网、电商、游戏和金融等领域。在使用Redis时,需要考虑数据的特性和访问模式,选择合适的数据类型和持久化机制,同时进行性能优化和容错处理,保证系统的高可用和稳定性。

猿谋人、 3万+

FPGA进位链(Carry Chain)实战:从Xilinx CARRY8原语到性能优化全解析

本文深入解析了FPGA进位链(Carry Chain)的原理与应用,重点剖析了Xilinx CARRY8原语的端口功能与内部机制。通过实测数据揭示了进位链的真实延迟特性与温度影响,并详细阐述了如何利用DI和S信号进行动态路径优化、实现减法运算与条件进位选择,从而有效提升设计性能。最后,文章探讨了系统级的流水线拆分、布局约束等实战优化策略与常见陷阱。

weixin_29313817的博客 451

Redis的十大常见应用场景

Redis的十大常见应用场景

m0_51358164的博客 1万+

能碳双控| AIRIOT智慧能碳管理解决方案

基于AIRIOT打造的智慧能碳管理平台解决方案结合大数据、物联网、人工智能(AI)、数字孪生等新一代信息技术,通过整合碳达峰、碳中和、实时碳价、碳配额和碳资产等多个模块,为组织提供了全方位、灵活且智能的碳资产管理解决方案,有助于实现碳管理目标、提升可持续性,并适应碳市场的不断变化。

AIRIOT的博客 1808

深入CARLA地图底层:OpenDRIVE文件如何影响你的仿真效果与避坑指南

本文深入解析CARLA仿真中OpenDRIVE地图文件的核心作用,揭示其如何影响车道连接、交通规则和导航逻辑。通过实战案例和代码示例,提供五大典型地图问题的诊断与修复方案,帮助开发者优化仿真效果并规避常见陷阱。

weixin_34180452的博客 277

适宜 Redis 的16种应用场景

Redis 是一款高性能的 key-value 存储系统,具有丰富的数据结构和强大的功能,在众多领域都有着广泛的应用。以下最适宜 Redis 的16种应用场景:1、缓存2、数据共享分布式3、分布式锁4、全局ID5、计数器6、限流7、位统计8、购物车9、用户消息时间线timeline10、消息队列11、抽奖12、点赞、签到、打卡13、商品标签14、商品筛选15、用户关注、推荐模型16、排行榜1、缓存...

架构精进之路 1494

GoldenDB 兼容模式冲突场景解析:MySQL 连接模式 vs Oracle 语法兼容

GoldenDB 兼容模式冲突场景解析:MySQL 连接模式 vs Oracle 语法兼容

weixin_45207751的博客 2250

Redis在Java中的应用

Redis在Java中的应用主要依赖于如Jedis、Lettuce、Spring Data Redis和Redisson等库和框架。开发者可以根据具体需求选择合适的工具,让Redis的操作更加高效和简洁。在分布式架构、缓存、会话存储、消息队列等多个场景中,Redis与Java结合使用,都能够发挥出较高的性能和灵活性。Spring Data Redis中提供了一个高度封装的类RedisTemplate,针对Jedis客户端中大量的API进行归类封装,将同一类型的操作封装为operation接口。

m0_74057690的博客 1478

Autodesk Genuine Service卸载失败?试试这个隐藏文件删除法(Win8-Win11通用)

本文针对Autodesk Genuine Service在Windows系统(Win8-Win11)中卸载失败的常见难题,提供了深度解析与根治方案。核心方法是手动定位并删除两个关键的隐藏文件(ProductInformation.pit和id.dat),以解除文件锁定或数据损坏导致的卸载障碍,随后再通过标准流程即可成功卸载。该方法通用性强,能有效解决这一困扰设计师和工程师的顽固问题。

weixin_29220405的博客 1474

《Python全栈系列教程》专栏介绍及文章汇总

《Python全栈系列教程》专栏介绍及文章汇总

孤寒者的博客 71万+

【redis】redis的特性和主要应用场景

redis的特性:在内存中存储数据、可编程的、扩展能力、持久化、集群、高可用、快。 redis的应用场景:实时数据存储、缓存、消息队列

Yeeear的博客 1万+

LVGL 蜂巢气泡菜单(Hex Menu)

h。

摸鱼专家 176

Redis入门与应用

1970 年布隆提出了一种布隆过滤器的算法,用来判断一个元素是否在一个集合中。这种算法由一个二进制数组和一个 Hash 算法组成。本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。

励志成为一名优秀的全能型软件开发工程师。 2387

SAP_SD模块销售利润中心替代简介

SAP SD模块跨公司销售利润中心替代简介 在SAP SD模块中,系统自动生成的财务凭证需要正确反映利润中心归属。当默认利润中心取值不符合业务逻辑时(如跨公司销售、多组织共用工厂等情况),需配置利润中心替代功能。该功能通过事务码0KEM定义替代规则,可根据物料、客户等条件自动替换利润中心字段。系统配置包括创建替代规则、定义先决条件、设置用户出口程序等步骤。对于复杂业务场景,还可通过用户出口或BADI增强实现。利润中心替代能确保销售收入与成本正确核算,避免利润分配错误,满足企业多维度利润分析需求。

我小时候很黑的博客 436

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Redis客户端应用教程

Redis客户端应用教程 项目介绍 Redis客户端应用是一个开源项目,旨在提供一个简单易用的Redis客户端工具。该项目支持多种Redis部署方式,包括Redis开源版、Redis Stack、Redis企业软件、Redis云、Amazon ElastiCache和Azure Cache for Redis等。通过该客户端应用,用户可以方便地浏览和交互Redis数据,执行CRUD操作,以及使用友...

gitblog_01038的博客 807

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

redis 的应用

Redis是基于 key-value的nosql数据库Redis支持丰富的数据结构,如字符串、列表、集合、有序集合等,使得它不仅仅是一个缓存系统,更是一个多用途的数据存储引擎。这为开发者提供了更多灵活的选择,能够更好地满足不同应用场景的需求。使用的场景有:缓存、分布式锁、计数器、排行榜、地理空间数据。

TCLAY 920

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Redis总结及项目中应用

总结redis常见问题与超卖问题

weixin_49238443的博客 4262

【Redis】三、在springboot中应用redis

本文介绍了如何在Spring Boot项目中集成Redis作为缓存中间件,以优化用户信息管理的性能。首先,通过引入redis依赖,配置Redis连接信息。接着,创建了一个用户管理模块,包括数据库表、实体类、控制器和服务层。在服务层中,通过RedisTemplate实现了缓存逻辑,优先从Redis中查询用户分数,若未命中则从MySQL数据库中获取并缓存到Redis中。最后,通过Postman测试接口,验证了Redis缓存的有效性,首次查询较慢,但后续查询速度显著提升。

naihe_fish的博客 1452

Redis应用场景简介

REmote DIctionary Server(Redis)是完全开源免费的,遵守 BSD 协议,是一个高性能的key-value数据库。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。 注:BSD开源协议(original BSD license、Free...

这世上所有的久处不厌,都是因为用心 2090

【实践】应用访问Redis突然超时怎么处理?

当Redis在线上环境中出现超时问题时,首要任务是快速定位并解决。首先,通过监控系统确认问题的存在,并启用告警机制。接着,分析Redis日志以寻找错误信息。检查服务器资源使用情况,包括CPU、内存及磁盘IO。利用INFO命令获取Redis状态,并通过SLOWLOG检查是否存在慢查询。调整Redis配置,如调整最大内存限制,优化客户端连接管理策略。必要时,考虑水平或垂直扩展来缓解负载。最后,总结经验教训,分享给团队,防止类似问题再次发生。

无休居士的博客 3318

Redis在SpringBoot中的简单应用

本文作为作者学习的日志,仅供学习使用

jingjiaohuan的博客 6198

redis在java中的应用

说到redis,相信不少小伙伴都知道是一个非关系型数据库.下面我就浅谈一下java操作redis的基本操作以及应用范围吧. 一:redis的安装解析 对于redis,有两种版本,第一就是单机版,何为单机版?顾名思义就是一个redis服务器就是一个单机版.可是随着用户的访问量的增加,并发量的增加,一台redis服务器是远远不够的.那么怎么解决呢?一台不行那就两台呗,甚至是多台.所以就有了集群版....

weixin_41796356的博客 1809

32个经典Redis应用实例,拿来就用的实战宝典

为了解决这个问题,本书采取了算法书介绍算法时的策略:不罗列和介绍每种应用可能包 含的全部 API,而是精挑细选出一组关键、核心的 API,然后用简洁精练的代码在书中实现它 们,配上合理的描述和解释,力求让读者尽可能地理解这些核心 API 的实现原理。因为本书关注的是如何使用 Redis 命令实现各种应用,而不是详细介绍某个或某些 Redis 命令的具体语法,所以刚开始学习 Redis 或者对 Redis 命令的语法并不熟悉的读者需要在阅读 本书的过程中自行查找并学习书中提到的命令。第二部分讲外部应用。

人邮异步社区 947

Redis应用流程

Redis应用流程 展示流程: 先从缓存取 ,如果不存在 ,从数据库取出来,写入缓存,再返回页面;如果存在key ,直接从缓存中取出来,展示到页面。 同步缓存:当事务提交(更新,删除,插入)后,需要同步缓存,直接根据Key 删除redis的key(清空缓存) ,再展示时 由上边的流程展示。 同步缓存: package com.taotao.content.service.impl; impo...

收破烂的小熊猫 1055
上一篇: 安装、了解nginx
下一篇: redis报错 : Wrong number of arguments for specified --cluster sub command
PingMo_
博客等级 码龄4年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值