Redis
文章平均质量分 78
奔向理想的星辰大海
这个作者很懒,什么都没留下…
展开
-
引入 Redis 缓存操作不一致引发的问题
此时就会出现数据库中的数据与缓存的数据不一致的情况,这是因为线程A先更新了数据库,可能因为网络等异常情况,线程B更新完数据库进而更新了缓存,当线程B更新完缓存后,线程A才更新缓存,这就导致了数据库数据与缓存数据的不一致。首先一个业务场景就是数据库写多读少的场景,这种场景下采用先更新数据库再更新缓存的策略,就会导致缓存并未被读取就会被频繁的更新,极大的浪费了服务器的性能。先删除缓存再更新数据库的方案也存在着线程安全的问题,例如,线程A更新缓存,同时,线程B读取缓存的数据。原创 2024-05-17 09:22:48 · 311 阅读 · 0 评论 -
redis 实现分布式序列
本地内存存储是不可取的,首先,同步多个客户端虚拟机内存数据太复杂,相当于自己实现了一个Redis,其次,保证内存数据存储安全太复杂。从分工上来看,任务队列的目的是管理任务执行的状态,业务系统把这个职责交给了任务队列,业务系统自身的任务状态维护未必准确。最极端的情况,所有Redis都停了,当消息队列发现Redis停止响应时,对业务系统的请求应抛出异常,停止队列服务。Redis 3.0支持集群了,还没细看,应该是个好消息,等大家都用起来,没什么问题的话,可以考虑试试看。可能是断电了,可能是进程被kill了。原创 2024-05-01 22:11:48 · 0 阅读 · 0 评论 -
redis zset详解:排行榜绝佳选择
跳跃表的查找和修改数据的性能较高,但是占用的内存也较多。membersWithScoresInScoreRange.forEach(o->log.info("9、获取ZSET中指定分数范围内的成员及其分数,成员:{},分数",o.getValue(),o.getScore()));membersWithScoresInRange.forEach(o->log.info("8、获取ZSET中指定排名范围内的成员及其分数,成员:{},分数",o.getValue(),o.getScore()));原创 2024-04-28 09:49:11 · 596 阅读 · 0 评论 -
要使用redis作为缓存 为啥要用redis,不用本地存储
在select/poll时代,服务器进程每次都把这100万个连接告诉操作系统(从用户态复制句柄数据结构到内核态),让操作系统内核去查询这些套接字上是否有事件发生,轮询完后,再将句柄数据复制到用户态,让服务器应用程序轮询处理已发生的网络事件,这一过程资源消耗较大,因此,select/poll一般只能处理几千的并发连接。在分布式系统中,三个用户进来下单,正好三个请求被分到了三个不同的服务节点上面,三个节点 检查剩余库存,发现还有1个,然后都去进行扣减,这样就导致库存为负数,有两个用户没有货发,就是俗称的超卖。原创 2024-04-20 16:10:41 · 688 阅读 · 0 评论 -
Redis 与MYSQL 数据实现同步
通过以上步骤,我们可以实现将数据库中的数据同步到 Redis 中。然后,我们创建 Redis 连接,并将数据同步到 Redis 中。最后,我们使用定时任务来定期执行数据同步操作,以保持 Redis 中的数据与数据库中的数据同步。在某些场景下,我们可能需要将数据库中的数据同步到 Redis 中,以提高读取性能和响应速度。为了保持 Redis 中的数据与数据库中的数据同步,我们可以使用定时任务来实现自动同步。总之,Redis 是一个强大的内存数据库,通过与数据库的数据同步,可以进一步提高读取性能和响应速度。原创 2024-04-12 10:39:30 · 97 阅读 · 0 评论 -
redis的内存优化
通过maxmemory指令设置Redis的最大内存使用量,当内存达到此设置值时,会根据配置的淘汰策略来处理新的写入请求。redis-cli --in-memory-optimize: 对键进行重hash以减少内存使用。Redis的内存优化主要包括配置合理的内存上限、选择合适的回收策略以及使用内存优化工具。volatile-ttl: 淘汰设置了过期时间的键,优先淘汰剩余时间(TTL)最短的键。volatile-lru: 只对设置了过期时间的键进行最近最少使用算法的淘汰。# 优化指定键的内存使用。原创 2024-04-11 09:57:45 · 152 阅读 · 0 评论 -
MySQL拥有2000万条数据的前提下,如何确保Redis仅缓存的20万条数据
Redis的所有数据都存储在内存中,这意味着它的容量相较于磁盘存储更为有限。为了解决内存容量不足的问题,Redis提供了多种数据淘汰策略。其中,与保证热点数据密切相关的是LFU(Least Frequently Used)策略,它能够根据数据对象的访问频次,将访问次数最少(即最不常用)的数据淘汰出内存,以便为新的数据腾出空间。原创 2024-04-10 10:43:44 · 1000 阅读 · 0 评论 -
Redis变慢了,快速排查解决方案
生成RDB和AOF都需要父进程fork出一个子进程进行数据的持久化,在fork执行过程中,父进程需要拷贝内存页表给子进程,如果整个实例内存占用很大,那么需要拷贝的内存页表会比较耗时,此过程会消耗大量的CPU资源,在完成fork之前,整个实例会被阻塞住,无法处理任何请求,如果此时CPU资源紧张,那么fork的时间会更长,甚至达到秒级。这会严重影响Redis的性能。即使这样,我们也不建议使用大key,大key在集群的迁移过程中,也会影响到迁移的性能,这个后面在介绍集群相关的文章时,会再详细介绍到。原创 2024-03-30 22:22:45 · 126 阅读 · 0 评论 -
Redis事务的概念及相关命令的使用
然后,依次执行了三个set命令,将键"aa"设置为值"22",将键"bb"设置为值"33",将键"cc"设置为值"44"。然后,依次执行了两个set命令,将键"aa"设置为值"11",将键"ee"设置为值"EE"。然后,依次执行了四个set命令,将键"aa"、“bb”、“cc"和"dd"分别设置为对应的值"AA”、“BB”、“CC"和"DD”。当事务中命令知识逻辑错误,就比如给字符串做加减乘除操作时,只能在执行过程中发现错误,这种事务执行中失败的命令不影响其他命令的执行。原创 2024-03-27 10:10:34 · 10 阅读 · 0 评论 -
springboot整合redis的哨兵模式
在Spring Boot中整合Redis的哨兵模式涉及到配置Spring Boot应用程序以连接到Redis哨兵集群。哨兵模式是Redis的一种高可用解决方案,它提供了自动故障转移功能,可以在Redis主节点发生故障时自动将一个从节点升级为新的主节点。在您的Spring Boot项目的application.properties或application.yml文件中配置Redis哨兵模式的连接信息。配置Redis哨兵。在Spring Boot项目中创建一个配置类,配置Redis连接工厂。原创 2024-03-21 11:37:51 · 111 阅读 · 0 评论 -
解决 Redis 并发竞争 Key 问题
当然,分布式锁可以基于很多种方式实现,比如zookeeper、redis等,不管哪种方式实现,基本原理是不变的:用一个状态值表示锁,对锁的占用和释放通过状态值来标识。watch这里表示监控该key值,后面的事务是有条件的执行,如果从watch的exec语句执行时,watch的key对应的value值被修改了,则事务不会执行。且从业务层面,有些是不可接受的场景。如果只有一个连接的情况下,这种方式没有问题,可以工作得很好,但如果有两个连接时,两个连接同时想对还price进行+10操作,就可能会出现问题了。原创 2024-03-18 09:10:20 · 308 阅读 · 1 评论 -
Redis 八种常用数据类型常用命令和应用场景
String 是 Redis 中最简单同时也是最常用的一个数据类型。String 是一种二进制安全的数据类型,可以用来存储任何类型的数据比如字符串、整数、浮点数、图片(图片的 base64 编码或者解码或者图片的路径)、序列化后的对象。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 简单动态字符串(Simple Dynamic String,SDS)。原创 2024-03-15 09:31:58 · 11 阅读 · 0 评论 -
SpringBoot 使用 RedisTemplate Cluster集群
我们能做的只有将所有key取出来,再进行分类,然后去不同的Redis实例上取(当然还有可能取错实例),其他的命令读者自行分析。从节点根据一定的机制去复制主节点的数据,起到备份作用,也就是备胎,随时等待上位的那种。同时由于默认引入的是Lettuce,而本文使用的是Jedis,因此我们需要排除Lettuce的依赖,引入Jedis依赖。而对于客户端来说,也就是我们的Java程序来说,我们不再直连Redis节点了,我们需要连接的是。执行方法前,不管缓存是否存在,都执行方法,并且把结果放入缓存中。原创 2024-03-07 17:24:01 · 831 阅读 · 0 评论 -
Redis 的竞争对手 SSDB
Redis是内存型,容量问题是弱项,并且内存成本太高,SSDB针对这个弱点,使用硬盘存储,使用Google高性能的存储引擎LevelDB,适合大数据量处理。并把性能优化到Redis级别,具有Redis的数据结构、兼容Redis客户端,还给出了从Redis迁移到SSDB的方案,看来真是想替代Redis。从官方数据看,SSDB的性能很突出,与Redis基本相当了,之后我会实际测试一下,看是不是真的这么牛。客户端支持的语言丰富,如 C++,PHP,Python,Java,Go。SSDB 官网的定义。原创 2024-02-23 16:11:23 · 25 阅读 · 0 评论 -
【架构】Redis 6.0 引入多线程机制带来的优势
你想在 Redis 的客户端应用程序中使用多线程,我可以给你一个简单的例子。在这个例子中,我们创建了5个线程,每个线程都会并行地执行相同的 Redis 操作(设置键值对)。2. 更好的CPU利用:多线程可以使得Redis更好地利用现代多核CPU的性能,因为多个线程可以同时运行在不同的CPU核心上。3. 异步文件IO:Redis 的多线程特性还包括了异步文件 I/O,这可以减少在写操作时的延迟,特别是在进行大容量写入时。4. 更好的扩展性:多线程使得Redis在面临高负载时,有更好的扩展性。原创 2024-02-17 16:17:58 · 138 阅读 · 0 评论 -
Spring Boot整合Redis:实现高效缓存管理
Redis是一个开源的内存数据结构存储系统,它支持多种类型的数据结构,如字符串(Strings), 哈希(Hashes), 列表(Lists), 集合(Sets), 有序集合(sorted sets)等等。Spring Boot提供了自动配置的Redis模板和高级的数据访问抽象,这使得在Java应用中使用Redis变得非常简单和直观。正确地配置和使用Redis,将会使你的应用更加健壮和高效。Spring Cache抽象提供了一个易于使用的缓存技术的抽象层,它可以通过简单的注解来实现方法级别的缓存。原创 2024-02-07 11:20:55 · 357 阅读 · 0 评论 -
【Redis】Redis实现分页+多条件模糊查询组合方案
我们通常习惯于在Mysql、Oracle这样持久化数据库中实现分页查询,但是基于某些特殊的业务场景下,我们的数据并未持久化到了数据库中或是出于查询速度上的考虑将热点数据加载到了缓存数据库中。因此,我们可能需要基于Redis这样的缓存数据库去进行分页查询。Redis的分页查询的实现是基于Redis提供的ZSet数据结构实现的,ZSet全称为Sorted Set,该结构主要存储有序集合。原创 2023-10-20 09:11:33 · 322 阅读 · 0 评论 -
【Redis】高效保障MySQL和Redis的数据一致性?
在满足实时性的条件下,不存在两者完全保存一致的方案,只有最终一致性方案。根据网上的众多解决方案,总结出 6 种,直接看目录:不好的方案1、先写 MySQL,再写 Redis如图所示:这是一副时序图,描述请求的先后调用顺序;橘黄色的线是请求 A,黑色的线是请求 B;橘黄色的文字,是 MySQL 和 Redis 最终不一致的数据;数据是从 10 更新为 11;后面所有的图,都是这个含义,不再赘述。原创 2023-10-16 11:34:18 · 257 阅读 · 0 评论