首页 / 分类 / Redis
CATEGORY

Redis

共 38 篇已发布文章

{ }}Redis

RedisTemplate 怎么获取到链接信息?怎么获取到所有key?怎么获取指定key?

获取Redis的链接信息:(RedisTemplate<String, ?> redisTemplate) { RedisConnectionFactory connectionFactory = redisTemplate.getConnectionFactory();

Redis2024.01.05116 阅读

Redis缓存同步1-策略介绍

缓存数据同步策略示意图在大多数情况下,我们通过浏览器查询到的数据都是缓存数据,如果缓存数据与数据库的数据存在较大差异的话,可能会产生比较严重的后果的。所以,我们应该也必须保证数据库数据、缓存数据的一致性,这就是缓存与数据库的同步。缓存数据同步策略缓存数据同步,常见的有三种方式:1:设置有效期给缓存设置有效期,到期后自动删除。再次查询的时候,更新数据。这种方式的优缺点及使用场景如下:优点:简单、方便

Redis2023.07.091667 阅读

Redis过期策略及持久化机制

一、Redis设置过期时间二、Redis的过期策略1、定时过期2、惰性过期3、定期过期三、Redis的8种内存淘汰策略LRU与LFU四、Redis 的持久化机制1、RDB快照持久化(redis默认)2、AOF追加文件持久化3、AOF和RDB都开启

Redis2023.04.072213 阅读

Redis实战15-Redis实现分布式锁思路

在上一篇文章中(Redis实战14-分布式锁基本原理和不同实现方式对比),我们介绍了为什么在集群或者分布式环境下,JVM级别的锁会失效,什么是分布式锁,分布式锁需要满足哪些条件以及实现分布式锁的三种常见方案,同时对三种实现方案做了对比。那么本文,咱们就来讲讲基于Redis实现分布式锁思路。实现分布式锁时候,需要实现两个基本的方法获取锁和释放锁获取锁获取锁时候需要考虑互斥和非阻塞。互斥:确保只能有一

Redis2023.04.022249 阅读

Redis实战14-分布式锁基本原理和不同实现方式对比

在上一篇文章(Redis实战13-集群下线程并发安全问题)中,我们知道了,当在集群环境下,synchronized关键字实现的JVM级别锁会失效的。那么怎么解决这个问题呢?我们可以使用分布式锁来解决。本文咱们就来介绍分布式锁基本原理以及不同实现方式对比。我们先来回顾,JVM级别锁的时序图。如下图:在集群下,不同jvm,就有多个锁监视器。那么,使用分布式锁应该是什么样的?我们可不可以把锁监视器提出来

Redis2023.04.022418 阅读

Redis实战13-集群下线程并发安全问题

通过前面两篇(Redis实战11-实现优惠券秒杀下单 Redis实战12-优惠券实现一人一单功能)的学习,我们已经解决了单机情况下优惠券秒杀及一人一单功能。其中,在优惠券秒杀时候,使用到了乐观锁处理的,在一人一单功能时候,使用了悲观锁,synchronized关键字及处理了spring事务失效情况。但是随着业务的增长,单机服务已经不能满足我们需求了,这个时候,需要多台机器来支撑。这就构成

Redis2023.04.022394 阅读

Redis实战12-优惠券实现一人一单功能

本文收获在上一篇,我们已经把超卖问题解决了。接下来,我们来开发,优惠券一人一单功能。通过本文学习,您将有如下收获:1:悲观锁、乐观锁的使用场景;2:synchronized关键字,在不同位置,锁的颗粒度是不同的,怎么优化呢;3:toString方法之后,不能保证唯一,如果要保证唯一,需要在调用String的intern方法;4:对spring事务有更深入了解-解决spring事务失效一种情况;5:

Redis2023.02.183593 阅读

Redis实战11-实现优惠券秒杀下单

本篇,咱们来实现优惠券秒杀下单功能。通过本篇学习,我们将会有如下收获:1:优惠券领券业务逻辑;2:分析在高并发情况下,出现超卖问题产生的原因;3:解决超卖问题两种方案:版本号法及CAS法4:乐观锁弊端改进方案;本文涉及内容比较多,篇幅会比较长,同时有大量截图。希望大家能耐心看完。好了,话不对说,咱们开始gogogo~一:基本的秒杀实现下单时候需要判断:1:秒杀是否开始或结束,如果尚未开始或者已经结

Redis2023.02.113343 阅读

Redis实战-session共享之修改登录拦截器

在上一篇中Redis实战之session共享,我们知道了通过Redis实现session共享了,那么token怎么续命呢?怎么刷新用户呢?本来咱们就通过拦截器来实现这两个功能。登录拦截器优化:先来看看现在拦截器情况:拦截流程:当拦截器拦截需要拦截到的url时候,才会在拦截器中更新用户token的过期时间。那如果,访问了不被拦截的路径,就不会给token续命的。这样就会导致用户token过期,而重新

Redis2023.02.072853 阅读

Redis实战之session共享

当线上集群时候,会出现session共享问题。虽然Tomcat提供了sessioncopy的功能,但是缺点比较明显:1:当Tomcat多的时候,session需要大量同步到多台集群上,占用内网宽带2:同一个用户session,需要在多个Tomcat中都存在,浪费内存空间如果要替换掉Tomcat的session共享,替代方案应该满足:1:数据共享2:内存存储3:key\value结构基于Redis实

Redis2023.02.063068 阅读

分库分表之后,ID主键如何处理?

分库分表之后,ID主键如何处理?当业务量大的时候,数据库中数据量过大,就要进行分库分表了,那么分库分表之后,必然将面临一个问题,那就是ID怎么生成?因为要分成多个表之后,如果还是使用每个表的自增长ID,意味着每个表都是从1开始累加的,这样肯定是不对的。需要一个全局唯一的ID来支持。所以这也是你实际生产环境中必须考虑的一个问题。全局ID生成器,一般需要满足下列几个特性:唯一性、高可用、递增性、安全性

Redis2023.02.022778 阅读

Redis快速入门

Redis快速入门,分两个客户端:Jedis和SpringDataRedis使用Jdedis1、引入依赖<!--jedis--><dependency>    <groupId>redis.clients</groupId>    <artifactId>je

Redis2023.01.312474 阅读

Redis实战9-全局唯一ID

发布优惠券的时候,每个店铺都可以发布优惠券,当用户抢购的时候,优惠券表中的id如果使用数据库的自增长ID会存在以下问题:1:id的规律太明显,容易被刷2:当数据量很大的时候,会受到单表数据的限制缺点场景分析:id规律场景:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。单表限制:随着我们商城规模越来越大,mysq

Redis2023.01.292796 阅读

【图文教程】Redis主从集群安装

我们在上一篇:《【图文教程】Centos单机安装Redis》讲解了怎么安装单机版的Redis。那么本文咱们就来讲讲,怎么安装一主多从的Redis集群Redis集群结构:我们搭建的主从集群结构如下图:共包含了三个节点:一个主节点,两个从节点。这里我们会在同一台虚拟机中开启3个Redis实例,来模拟主从集群。信息如下图:如果想要使用真实的3台Redis实例,建议使用docker来安装。关于使用dock

Redis2023.01.132625 阅读

【科普】在查看一些C语言编写的源码的时候,会遇到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t都是什么意思

在查看一些C语言编写的源码的时候,会遇到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t都是什么意思?比如我们在查看Redis源码的时候,就会看到uint32_t

Redis2023.01.092521 阅读

【转载】Redis内部数据结构详解(1)——dict

如果你使用过Redis,一定会像我一样对它的内部实现产生兴趣。《Redis内部数据结构详解》是我准备写的一个系列,也是我个人对于之前研究Redis的一个阶段性总结,着重讲解Redis在内存中的数据结构实现(暂不涉及持久化的话题)。Redis本质上是一个数据结构服务器(datastructuresserver),以高效的方式实现了多种现成的数据结构,研究它的数据结构和基于其上的算法,对于我们自己提升

Redis2023.01.092146 阅读
{ }}Redis

Redis集群下批处理-串行化执行代码实践

当在Redis集群模式下,我们就不能使用mset和pipeline了。因为分片集群下,插槽是根据key算出来的,不同的key算出的slot不同,slot不同的话,可能Redis实例节点也不是一个,所以,不能直接使用mset或者pipeline了。第二种方案:串行slot,简单来说,就是执行前,客户端先计算一下对应的key的slot,一样slot的key就放到一个组里边,不同的,就放到不同的组里边,

Redis2023.01.052195 阅读

Redis的Hash结构大数据量拆分成多个小的hash工具类

假如有hash类型的key,其中有100万对field和value,field是自增id,这个key存在什么问题?如何优化?拆分前占用内存大小:方案:拆分为小的hash,将id/100作为key,将id%100作为field,这样每100个元素为一个Hash拆分后,占用内存大小:拆分工具类:import com.heima.jedis.util.JedisConnectionFactor

Redis2023.01.052533 阅读

Redis发现BigKey,利用scan扫描工具类

我们知道Redis的BigKey的发现,有三种方法,其中一种就是使用scan命令来扫描的。scan命令:使用scan命令示例:scan命令调用完之后,每次返回2个元素,第一个是下一次迭代的光标,第一个光标会设置为0,当最一次scan返回的光标等于0的时候,表示整个scan遍历完成了。第二个返回的是list,一个匹配的key的数组。根据这些,自己可以手动写一个工具类型。import org

Redis2023.01.052515 阅读

【已解决】Redis分片集群在缩容的时候,执行删除节点命令提示:is not empty! Reshard data away and try again

Redis分片集群,扩容之后,需要进行缩容,在执行删除节点命令命令的时候,提示如下错误:isnotempty!Resharddataawayandtryagain提示[ERR]Node127.0.0.1:7004isnotempty!Resharddataawayandtryagain.说明,当前该节点还有哈希槽信息,我们需要重哈希移走所有的数据才行,接下来执行操作删除节点操作。这里顺便说下,删除

Redis2023.01.043163 阅读