Redis 高并发解决方案
针对大流量瞬间冲击,比如秒杀场景
redis前面可以加一层限流 sentinel / Hystrix
redis高并发(读多写少)下缓存数据库双写误差:
1. 修改操作使用分布式锁(就是修改的时候加锁,一次只能有一个线程修改,可以多线程读),对于读多的场景更有利;推荐(以较少的性能代价换取了绝对的一致)
2. 延迟删除缓存
修改一个key后,删除缓存,为了防止之前有线程读过旧数据然后再次写入,sleep 10毫秒再删除一次,但此步要后台处理,不然可能会大幅降低整体性能。
3. 写直接写入数据库,通过canal等中间件订阅binlog,然后将变化应用到缓存,缓存只提供读操作; 可能存在读延迟
多读写也多
1. 使用消息中间件,不推荐使用redis缓存
2. 直接使用数据库都比再加个缓存快,尤其那些高速写入又马上查询,甚至还会统计分析的业务。
Redis缓存的超时时间
要把这个因素的考虑,贯穿到所有场景。要根据自己的业务场景来设定超时时间
被动删除:过期的key不会立即删除,会在下次被get时删除。
主动删除:定期主动删除过期key
不推荐方案-一个大redis集群后面多个数据库
这相当于让并发集中在redis那里了,不仅没有提升性能,还降低了性能
要让redis集群与数据库集群一一对应,拆分开来
如果这样都行,那么直连数据库也没啥问题; 那问题来了,为啥还要浪费一堆资源弄个redis集群呢?
Redis连接池配置
对于高并发场景,配置maxTotal = maxIdle,即减少了连接创建与销毁的资源; 非高并发的场景不要这么配,因为连接的存在也是耗费资源的。
连接池预热。Redis的连接是用时才生成,如果你知道某个时间点(定点秒杀,一天都没有啥请求,就等那个时间点)会瞬间生成大量连接,可以使用使用jedis.ping()提前生成一些连接。
Redis 高并发解决方案的更多相关文章
- Redis高并发和快速的原因
一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接 ...
- PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类
一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...
- Redis高并发快的3大原因详解
1. Redis的高并发和快速的原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接 ...
- 关于SQL SERVER高并发解决方案
现在大家都比较关心的问题就是在多用户高并发的情况下,如何开发系统,这对我们程序员来说,确实是值得研究,最近找工作面试时也经常被问到,其实我早有去关心和了解这类问题,但一直没有总结一下,导致面试时无法很 ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- java并发编程与高并发解决方案
下面是我对java并发编程与高并发解决方案的学习总结: 1.并发编程的基础 2.线程安全—可见性和有序性 3.线程安全—原子性 4.安全发布对象—单例模式 5.不可变对象 6.线程封闭 7.线程不安全 ...
- 高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发)
高并发解决方案--负载均衡(HTTP,DNS,反向代理服务器)(解决大流量,高并发) 一.总结 1.什么是负载均衡:当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服 ...
- 《Netty Zookeeper Redis 高并发实战》 图书简介
<Netty Zookeeper Redis 高并发实战> 图书简介 本书为 高并发社群 -- 疯狂创客圈 倾力编著, 高度剖析底层原理,深度解读面试难题 疯狂创客圈 Java 高并发[ ...
- JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案
JAVA系统架构高并发解决方案 分布式缓存 分布式事务解决方案
随机推荐
- Mysql基础教程:(七)MySQL基础练习
MySQL基础练习 一.创建student和score表 CREATE TABLE student (id INT(10) NOT NULL PRIMARY KEY ,name VARCHAR(20) ...
- google浏览器设置检查元素显示框位置
- (一)初识MySQL
JavaEE:企业级Java开发 Web 前端(页面:展示,数据) 后台(连接点,连接数据库JDBC,链接前端(控制,控制视图跳转和给前端传递数据)) 数据库(存数据,Txt,Excel,word) ...
- 菜鸡的Java笔记 Eclipse 的使用
Eclipse 的使用 1. Eclipse 简介 2. Eclipse 中的JDT 的使用 3. Eclipse 中的使用 junit 测试 Eclipse (中文翻 ...
- [atAGC052B]Tree Edges XOR
定义两点的距离$d(x,y)$为$x$到$y$路径上边权异或和,则两棵树相同当且仅当$\forall 1\le i\le n$,$d(1,i)$相同 新建一个节点0,连边$(0,1)$,初始权值为0, ...
- 下一代的 3D Tiles 前瞻
下一代的 3D Tiles 前瞻 原文:Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse 原文发布时间:2021年11月 ...
- 第一章 初始C语言
第一章 初始C语言 目录 第一章 初始C语言 1. C语言起源 2. 选择C语言的理由 2.1 设计特性 2.2 高效性 2.3 可移植性 2.4 强大而灵活 2.5 面向程序员 3. C语言的应用范 ...
- 在spring启动后执行代码
如果spring的项目直接监听tomcat启动对于 操作来说有很大难度,bean没有初始化,接口不能直接调用等等,所以我们代码执行要在spring启动之后执行项目 package com.java71 ...
- Python的数据解析
- JavaScript Sanitizer API:原生WEB安全API出现啦
10月18号, W3C中网络平台孵化器小组(Web Platform Incubator Community Group)公布了HTML Sanitizer API的规范草案.这份草案用来解决浏览器如 ...