ZzRG的小站—一个全栈开发爱好者的博客,博客主要用来记录与分享技术、学习技术知识点。
Redis的双写一致性问题你只要用缓存,就可能会涉及到redis缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,谈谈自己对双写一致性的理解!双写一致性的了解。如果redis中有数据----需要和数据库中的值相同如果redis中无数据----需要数据库中的值要是最新值,且准备回写redis缓存按照操作分,细分2种----只读缓存||读写缓存同步直写策略---写数据库后也同步写redis缓存,缓存和数据库中的数据一致;对于读写缓存来说,要想保证缓存和数据库中的数据一致,就要采用同步致谢策略。异步缓写策略---正常的业务运行中,mysql数据变动了,但是可以在业务上容许出现一定时间后才作用于redis,比如仓库,物流系统;异常情况出现了,不得不将失败的动作重新修补,有可能需要借助kafka或者RabbitMQ等消息中间件,实现重视重写。那么你如何解决一致性问题?双检加锁策略多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就
BigKey100w数据导入redis生产中不允许Key *生产上限制keys */flushdb/flushall等危险命令以防止误删误用?通过配置设置禁用这些命令,redis.conf在SECURITY这一项中可以用 scan命令-----Scan命令用于迭代数据库中的数据库键语法SACN cursor [MATCH pattern] [COUNT count]cursor-游标 pattern-匹配的模式 count-指定从数据表返回多少元素,默认值为10 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程以O作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历不保证每次执行都返回某个给定数量的元素,支持模糊查询一次返回的数量不可控,只能是大概率符合count参数什么算大KeyString 是value 最大512MB但是≥10KB就是BigKeylsit、hash、set和zset,个数超过5000就是bigKey带来的危害内存不均,集群迁移困难超时删除,大Key删除作梗网络流量阻塞如何发现MEMORY USAGE 键如何删除---阿里巴巴开发手册渐
Redis到底是单线程还是多线程?这种说法有些不严谨!!! 考虑到版本上的问题版本3.x最早的版本:redis是单线程!redis4.x之后才支持多线程,直到redis6/7才稳定Redis是单线程 主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端请求时包括获取(socket读)、解析、执行、内容返回(socket写)等都是由一个顺序串行的主线程处理,这就是所谓的"单线程"。这也是Redis对外提供键值对存储服务的主要流程。但Redis的其他功能,比如持久化RD、AOF、异步删除、集群数据同步等等,其实是由额外的线程执行的。Redis命令工作线程是单线程的,但是,整个Redis来说,是多线程的;Redis3.x单线程时代性能依旧快的原因基于内存操作:Redis的所有数据都存在内存中,因此所有的运算都是内存级别的,所以它的性能比较高。数据结构简单:Redis的数据结构时专门设计的,而这些简单的数据结构的查找和操作的时间大部分复杂度都是O(1),因此性能比较高。多路复用和非阻塞IO:Redis使用I/O的多路复用功能来监听第一个Socket连接客
分布式锁CREATE TABLE `stock` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `product_code` varchar(20) NOT NULL, `warehouse` varchar(20) NOT NULL, `count` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `idx_pc` (`product_code`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;1.JVM本地锁2.一个sql3.悲观锁:select ...from updatemysql悲观锁中使用行级锁:1.锁的查询或者更新条件必须是索引字段 2.查询或者更新条件必须是具体值 不能使用 like这样的模糊查询Mapper代码实现:@select("select * from stock where product_code = #{productCode} for update;") List<S
前端在使用进行vite插件 vite-plugin-mock 测试数据时候踩到坑在进行配置时 官网的文档是这样的import { UserConfigExport, ConfigEnv } from 'vite' import { viteMockServe } from 'vite-plugin-mock' import vue from '@vitejs/plugin-vue' export default ({ command }: ConfigEnv): UserConfigExport => { return { plugins: [ vue(), viteMockServe({ // default mockPath: 'mock', localEnabled: command === 'serve', }), ], } }由于vite版本的不同 直接用官网的方法进行配置会出现访问 接口404首先进行断点输出 看是那个地方的问题 最终确定了出问题的地方根据
ZzRG
状态 统计 图床 • •