202103-22 浅谈我是如何用redis做实时订阅推送的 前阵子开发了公司领?恢行牡南钅浚?飧鱿钅渴且?edis作为关键技术落地的。先说一下领?恢行牡南钅堪桑?飧鱿钅烤屠嗨凭┒?pp的领?恢行模?比煌际墙厝【┒?模??镜木筒唤亓恕!!?/p>其中有一个功能叫做领?坏亩┰耐扑汀J裁词橇?坏亩┰耐扑停烤褪怯没Ф┰牧烁?坏耐扑停?诳闪烊∏暗囊环种泳鸵?烟嵝研畔⑼扑偷接没У?pp中。本来这个订阅功能应该是消息中心那边做的,但他们说这个短时间内做不了。所以让我这个负责优惠?坏淖隽?.-!。具体方案... 继续阅读 >
202103-16 使用 Redis 缓存实现点赞和取消点赞的示例代码 点赞功能是很多平台都会提供的一个功能,那么,我们要如何实现点赞和取消点赞呢?这篇文章总结了我在项目中实现点赞的方法。缓存vs数据库?首先我们要考虑的是数据要放到哪里,很多时候我们都会把数据放到数据库(如MySQL),由于关系型数据库的稳定性,大部分场景下我们也都会使用关系数据库来存储数据。不过,在一些特殊的场景下,传统的关系型数据库很可能无法满足我们的需求。比如,在访问量较大的情况下,数据库很可能会宕... 继续阅读 >
202103-16 通俗易懂的Redis数据结构基础教程(入门) Redis有5个基本数据结构,string、list、hash、set和zset。它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了。string首先我们从string谈起。string表示的是一个可变的字节数组,我们初始化字符串的内容、可以拿到字符串的长度,可以获取string的子串,可以覆盖string的子串内容,可以追加子串。Redis的字符串是动态字符串,是可以修改的字符串,内部结构实现上类... 继续阅读 >
202103-07 详解Redis 缓存删除机制(源码解析) 删除的范围过期的key在内存满了的情况下,如果继续执行set 等命令,且所有key都没有过期,那么会按照缓存淘汰策略选中的key过期删除redis中设置了过期时间的key会单独存储一份typedefstructredisDb{dict*dict;//所有的键值对dict*expires;//设置了过期时间的键值对//...}redisDb;设置有效期Redis中有4个命令可以给key设置过期时间,分别是expire pexpire expireat pexpir... 继续阅读 >
202102-28 java中redis增删查以及清理缓存的案例 我就废话不多说了,大家还是直接看代码吧~Controller@ApiOperation(value="获取信息放入Redis中")@RequestMapping(value="/getPropertyTakeLookShoppingDetailRedis",method=RequestMethod.POST)publicJsonResultgetPropertyTakeLookShoppingDetailRedis(@RequestBodyPropertyTakeLookRedisParamparam)throwsException{log.info("PropertyTakeLookController.getPropertyTakeLookShoppingDetailRedis:"+param);... 继续阅读 >
202102-23 redis 交集、并集、差集的具体使用 一、sinter、sunion、sdiffredis支持Set集合的数据存储,其中有三个比较特殊的方法:sinterkey[key…]查看一个集合的全部成员,该集合是所有给定集合的交集。sunionkey[key…]查看一个集合的全部成员,该集合是所有给定集合的并集。sdiffkey[key…]查看所有给定key与第一个key的差集1.1、sinter交集的示例redis>SMEMBERSgroup_11)"LILEI"2)"TOM"3)"JACK"redis>SMEMBERSgroup_21)"HANMEIMEI"2... 继续阅读 >
202102-23 Java利用Redis实现高并发计数器的示例代码 业务需求中经常有需要用到计数器的场景:譬如一个手机号一天限制发送5条短信、一个接口一分钟限制多少请求、一个接口一天限制调用多少次等等。使用Redis的Incr自增命令可以轻松实现以上需求。以一个接口一天限制调用次数为例:/***是否拒绝服务*@return*/privatebooleandenialOfService(StringuserId){longcount=JedisUtil.setIncr(DateUtil.getDate()+"&"+userId+"&"+"queryCarViolation",86400);if(count<=10){r... 继续阅读 >
202102-21 Spring @Cacheable redis异常不影响正常业务方案 背景项目中,使用@Cacheable进行数据缓存。发现:当redis宕机之后,@Cacheable注解的方法并未进行缓存冲突,而是直接抛出异常。而这样的异常会导致服务不可用。原因分析我们是通过@EnableCaching进行缓存启用的,因此可以先看@EnableCaching的相关注释通过@EnableCaching的类注释可发现,springcache的核心配置接口为:org.springframework.cache.annotation.CachingConfigurer/***Interfacetobeimplementedby@{@linkorg.sp... 继续阅读 >
202102-21 一文掌握Redis的三种集群方案(小结) 在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性、可靠性要求较高,则需要引入Redis的集群方案。虽然现在各大云平台有提供缓存服务可以直接使用,但了解一下其背后的实现与原理总还是有些必要(比如面试),本文就一起来学习一下Redis的几种集群方案。Redis支持三种集群方案主从复制模式Sentinel(哨兵)模式Cluster模式主从复制模式1.基本原理主从复制模式中包含一个主数... 继续阅读 >
202102-21 SpringBoot和Redis实现Token权限认证的实例讲解 一、引言登陆权限控制是每个系统都应必备的功能,实现方法也有好多种。下面使用Token认证来实现系统的权限访问。功能描述:用户登录成功后,后台返回一个token给调用者,同时自定义一个@AuthToken注解,被该注解标注的API请求都需要进行token效验,效验通过才可以正常访问,实现接口级的鉴权控制。同时token具有生命周期,在用户持续一段时间不进行操作的话,token则会过期,用户一直操作的话,则不会过期。二、环境SpringBootRedi... 继续阅读 >
202102-21 Redis为什么要存两次数据 在Redis中,有一种数据类型,当在存储的时候会同时采用两种数据结构来进行分别存储,那么Redis为什么要这么做呢?这么做会造成同一份数据占用两倍空间吗?五种基本类型之集合对象Redis中的集合对象是一个包含字符串类型元素的无序集合,集合中元素唯一不可重复。集合对象的底层数据结构有两种:intset和hashtable。内部通过编码来进行区分:编码属性描述objectencoding命令返回值... 继续阅读 >
202102-21 Redis中哈希分布不均匀的解决办法 Redis是一个键值对数据库,其键是通过哈希进行存储的。整个Redis可以认为是一个外层哈希,之所以称为外层哈希,是因为Redis内部也提供了一种哈希类型,这个可以称之为内部哈希。当我们采用哈希对象进行数据存储时,对整个Redis而言,就经过了两层哈希存储。哈希对象哈希对象本身也是一个key-value存储结构,底层的存储结构也可以分为两种:ziplist(压缩列表)和hashtable(哈希表)。这两种存储结构也是通过编码来进行... 继续阅读 >
202102-21 Redis都做了哪些加快速度的设计 列表对象是Redis中5种基础数据类型之一,在Redis3.2版本之前,列表对象底层存储结构有两种:linkedlist(双端列表)和ziplist(压缩列表),而在Redis3.2版本之后,列表对象底层存储结构只有一种:quicklist(快速列表),难道通过精心设计的ziplist最终被Redis抛弃了吗?列表对象同字符串对象一样,列表对象到底使用哪一种数据结构来进行存储也是通过编码来进行区分:编码属性描述object... 继续阅读 >
202102-21 压缩列表牺牲速度来节省内存,Redis是膨胀了吗 正常情况下我们选择使用Redis就是为了提升查询速度,然而让人意外的是,Redis当中却有一种比较有意思的数据结构,这种数据结构通过牺牲部分读写速度来达到节省内存的目的,这就是ziplist(压缩列表),Redis为什么要这么做呢?难道真的是觉得自己的速度太快了,牺牲一点速度也不影响吗?什么是压缩列表ziplist是为了节省内存而设计出来的一种数据结构。ziplist是由一系列特殊编码组成的连续内存块的顺序型数据结构,一个zi... 继续阅读 >
202102-21 Redis凭啥可以这么快 在日常开发中,为了保证数据的一致性,我们一般都选择关系型数据库来存储数据,如MySQL,Oracle等,因为关系型数据库有着事务的特性。然而在并发量比较大的业务场景,关系型数据库却又往往会成为系统瓶颈,无法完全满足我们的需求,所以就需要使用到缓存,而非关系型数据库,即NoSQL数据库往往又会成为最佳选择。NoSQL数据库最常见的解释是non-relational,也有人解释为NotOnlySQL。非关系型数据库不保证事务,也就是不具... 继续阅读 >
202102-21 JAVA中 redisTemplate 和 jedis的配合使用操作 首先项目A,也就是SpringBOOT项目中使用redisTemplate来做REDIS的缓存时,你会发现存到REDIS里边的KEY和VALUE,redisTemplat使用jdkSerializeable存储二进制字节编码项目B中使用jedis时,存储起来的是字符串,导致项目A要调用项目缓存的键值对时,获取不到解决方案:修改项目A的redisTemplate的序列方式@Configuration@EnableCachingpublicclassRedisConfigextendsCachingConfigurerSupport{/***redis模板,存储关键... 继续阅读 >