百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis技术文章(redis实战的例子和教程)

mhr18 2024-11-08 12:19 25 浏览 0 评论

目录

全局唯一ID缓存穿透缓存雪崩缓存击穿互斥锁解决缓存击穿问题秒杀超卖问题悲观锁 AND 乐观所生成的Sql 语句一人一单秒杀分布式锁redis 分布式锁redis 分布式锁如何解决原子性高级篇数据持久化RDB模式AOF模式AOF和RDB两者区别分布式主从集群搭建主从集群修改redis.conf文件

全局唯一ID

在一般业务中秒杀功能,存在并发问题如果两个线程同时执行插入操作导致数据库id 自增 同时为一个数 就会导致写入数据失败
全局Id生成器

点击查看代码

缓存穿透

缓存雪崩

缓存击穿

互斥锁解决缓存击穿问题

多个线程并行执行的时候 只有一个成功

秒杀超卖问题

同时间 抢购会导致库存超卖问题(多个线程交叉执行导致的)例如两个线程同时查询到库存为 1 (此时库存中满足大于0 所以两个都会执行扣减)

悲观锁 AND 乐观锁

悲观锁会认为线程安全一定会发生 所以在操作数据之前就先获取锁,确保线程串行执行


主要说一下乐观锁,常见的处理方法
版本号法。乐观锁的关键就是判断之前查询到的数据是否有被修改过


CAS 法 (可以说是版本号法的升级版)
如果说是一个减库存操作,可以使用库存数据作为版本标识

生成的Sql 语句

where id = ? and version > 0
为什么版本要大于0 而不是等于 (因为只要是在这个区间就可以 不小于0 即可)

一人一单秒杀

这个没啥说的,简单的方法查询数据库用户ID 进行订单判断是否是同一个id (一般是把商品id 和 用户id 标识当前商品这个用户已经买过了)重点就是 先判断这个用户是否有过

分布式锁

redis 分布式锁

场景:目的是为了解决多台相同服务之间同时工作产生的并发问题,(例如订单系统,假设订单系统部署在两台机器上,但是库存是固定的,接着每个订单系统实例都去数据库里查了一下,由于并发问题导致超卖,这肯定是不允许的)(当然并发特别大的话是需要进行分段数据,数据分段会导致整体业务流程更加复杂,如果没有这方面的需求建议不要使用)
SETNX LOCK Thread1
为了保证原子性 (带上过期时间) 如果不设置过期时间会出现死锁问题(例如因为某些原因todo 内业务阻塞了会导致锁一直无法释放)
Set lock thread1 EX 10 NX
例子

点击查看代码

redis 分布式锁如何解决原子性

场景,如果在获取锁后执行的一些操作,但是此时遇到阻塞,导致锁超时释放了,(比如我们获取了一个自己的锁,然后去执行减库存操作,但是在减库存操作中遇到了阻塞,导致锁超时释放了,此时我们的减库存操作因为阻塞了还没有完成,但是redis锁已经释放了,后面假设此时减库存操作完成了,去调用释放锁,此时会导致当前下释放的锁可能是别人的锁,(因为我们的锁已经超时释放了))


解决这个问题 就是把多条命令 获取锁和释放锁保证原子性
可以是使用Lua 脚本进行调用Redis.call

高级篇

数据持久化

RDB模式

RDB (redis Database Backup file)数据备份文件
save # redis主进程执行备份,会阻塞所有命令
bgsave #开启子线程执行备份,避免主线程受到影响
save 5 1 (表示五秒内有一次修改就执行备份操作) 可以在redis.conf中修改


bgsave fork主进程开启一个子进程,共享内存空间,(这时候物理内存是只读模式)
如果会有写入操作会拷贝一份数据

AOF模式

AOF全称为 Append only file(追加文件),redis会处理每一个写入命令都会记录在aof文件中
AOf默认是关闭的
appendonly yes appendfilename "appendonly.aof"

AOF和RDB两者区别

分布式主从集群

搭建主从集群

单节点Redis并发能力邮上线,要提升并发能力需要搭建主从集群,实现读写分离(大部分业务都是读的业务)
一般写入到master 节点,同步到子节点
需要三台redis 服务器

修改redis.conf文件

相关推荐

redis 7.4.3更新!安全修复+性能优化全解析

一、Redis是什么?为什么选择它?Redis(RemoteDictionaryServer)是一款开源的高性能内存键值数据库,支持持久化、多数据结构(如字符串、哈希、列表等),广泛应用于缓存、消...

C# 读写Redis数据库的简单例子

CSRedis是一个基于C#的Redis客户端库,它提供了与Redis服务器进行交互的功能。它是一个轻量级、高性能的库,易于使用和集成到C#应用程序中。您可以使用NuGet包管理器或使用以下命令行命令...

十年之重修Redis原理

弱小和无知并不是生存的障碍,傲慢才是。--------面试者总结Redis可能都用过,但是从来没有理解过,就像一个熟悉的陌生人,本文主要讲述了Redis基本类型的使用、数据结构、持久化、单线程模型...

高频L2行情数据Redis存储架构设计(含C++实现代码)

一、Redis核心设计原则内存高效:优化数据结构,减少内存占用低延迟访问:单次操作≤0.1ms响应时间数据完整性:完整存储所有L2字段实时订阅:支持多客户端实时数据推送持久化策略:RDB+AOF保障数...

Magic-Boot开源引擎:零代码玩转企业级开发,效率暴涨!

一、项目介绍基于magic-api搭建的快速开发平台,前端采用Vue3+naive-ui最新版本搭建,依赖较少,运行速度快。对常用组件进行封装。利用Vue3的@vue/compiler-sfc单文...

项目不行简历拉胯?3招教你从面试陪跑逆袭大厂offer!

项目不行简历拉胯?3招教你从面试陪跑逆袭大厂offer!老铁们!是不是每次面试完都感觉自己像被大厂面试官婉拒的渣男?明明刷了三个月题库,背熟八股文,结果一被问项目就支支吾吾,简历写得像大学生课程设计?...

谷歌云平台:开发者部署超120个开源包

从国外相关报道了解,Google与Bitnami合作为Google云平台增加了一个新的功能,为了方便开发人员快捷部署程序,提供了120余款开源应用程序云平台的支持。这些应用程序其中包括了WordPre...

知名互联网公司和程序员都看好的数据库是什么?

2017年数据库领域的最大趋势是什么?什么是最热的数据处理技术?学什么数据库最有前途?程序员们普遍不喜欢的数据库是什么?本文都会一一揭秘。大数据时代,数据库的选择备受关注,此前本号就曾揭秘国内知名互联...

腾讯云发布云存储MongoDB服务

近日,著名安全专家兼Shodan搜索引擎的创建者JohnMatherly发现,目前至少有35000个受影响的MongoDB数据库暴露在互联网上,它们所包含的数据暴露在网络攻击风险之中。据估计,将近6...

已跪,Java全能笔记爆火,分布式/开源框架/微服务/性能调优全有

前言程序员,立之根本还是技术,一个程序员的好坏,虽然不能完全用技术强弱来判断,但是技术水平一定是基础,技术差的程序员只能CRUD,技术不深的程序员也成不了架构师。程序员对于技术的掌握,除了从了解-熟悉...

面试官:举个你解决冲突的例子?别怂!用这个套路……

面试官:举个你解决冲突的例子?别怂!用这个套路……最近收到粉丝私信,说被问到:团队技术方案有分歧怎么办?当场大脑宕机……兄弟!这不是送命题,是展示你情商+技术判断力的王炸题!今天教你们3招,用真实案例...

面试碰到MongoDB?莫慌,跟面试官这样吹MongoDB 复制集

推荐阅读:吊打MySQL:21性能优化实践+学习导图+55面试+笔记+20高频知识点阿里一线架构师分享的技术图谱,进阶加薪全靠它十面字节跳动,依旧空手而归,我该放弃吗?文末会分享一些MongoDB的学...

SpringBoot集成扩展-访问NoSQL数据库之Redis和MongoDB!

与关系型数据库一样,SpringBoot也提供了对NoSQL数据库的集成扩展,如对Redis和MongoDB等数据库的操作。通过默认配置即可使用RedisTemplate和MongoTemplate...

Java程序员找工作总卡项目关?

Java程序员找工作总卡项目关?3招教你用真实经历写出HR抢着要的简历!各位Java老哥,最近刷招聘软件是不是手都划酸了?简历投出去石沉大海,面试邀请却总在飞别人的简历?上周有个兄弟,13年经验投了5...

Java多租户SaaS系统实现方案

嗯,用户问的是Java通过租户id实现的SaaS方案。首先,我需要理解用户的需求。SaaS,也就是软件即服务,通常是指多租户的架构,每个租户的数据需要隔离。用户可能想知道如何在Java中利用租户ID来...

取消回复欢迎 发表评论: