分类 Redis 下的文章

大家都知道,计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存,将一些热点数据放在内存中,随用随取,降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是,无论是击穿还是后面谈到的穿透与雪崩,都是在高并发前提下,比如当缓存中某一个热点key失效。

redis缓存击穿

是指某一个非常热点的key (即在客户端搜索的比较多的关键字)突然失效了,这时从客户端发送的大量的请求在redis里找不到这个key,就会去数据里找,最终导致数据库压力过大崩掉

项目需求:

   在管理员点击督办之后;对app作出一个消息提醒。
   推的比较常见,就是例如这个网站的这个问题,维护着一张关注者的列表,每当触发这个问题推送的条件时(例如有人回答

问题),就把这个通知发送给每个关注者。

   拉的相对麻烦一点,就是推的反向,例如每个用户都有一张关注问题的列表,每当用户上线的时候,对每个问题进行轮询,

当问题的事件列表出现了比我原本时间戳大的信息就进行拉取。

技术选型:

主要借鉴了spring对jms的封装,比如使用注解@JmsListener来完成监听.

定义自定义监听注解

框架的使用

redis订阅通知的缺陷:

https://www.zhihu.com/question/20380990
https://blog.csdn.net/cdy1996/article/details/83933366

1:项目初始化
@PostConstruct 被注解的方法,在对象加载完依赖注入后执行

@PostConstruct
public void init()
{
    List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll();
    for (SysDictType dictType : dictTypeList)
    {
        List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType());
        DictUtils.setDictCache(dictType.getDictType(), dictDatas);
    }
}

2:我们通常会结合数据库来实现数据字典,但事实上数据字典经常会被使用到,如果频繁地去访问数据库,将会对数据库造成性能压力,事实上我们经常会采用Redis对数据字典进行缓存来提升系统性能

String dictTypeTemp="logistics";
List<SysDictData> data = dictTypeService.selectDictDataByType(dictTypeTemp);

3:在SpringBoot中使用Junit进行Redis的链接测试;基于Ruoyi-Vue

package com.test;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisCon {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    public  void setArgs() throws Exception {
        stringRedisTemplate.opsForValue().set("aaa", "111");
        Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
    }
}