Springboot使用Redis中ZSetOperations实现博客访问量

 更新时间:2024年01月26日 16:55:52   作者:迟意..  
在日常的网站使用中,经常会碰到页面的访问量,本文主要介绍了Springboot使用Redis中ZSetOperations实现博客访问量,具有一定的参考价值,感兴趣的可以了解一下

1.在application.yml中Redis配置信息

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: 12345678

2.在pom.xml中加载依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.配置Redis Template

@Configuration
public class RedisConfig {
  @Bean("redisTemplate")
  public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
      // 1.创建RedisTemplate对象
      RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
      // 2.加载Redis配置
      redisTemplate.setConnectionFactory(lettuceConnectionFactory);
      // 3.配置key序列化
      RedisSerializer<?> stringRedisSerializer = new StringRedisSerializer();
      redisTemplate.setKeySerializer(stringRedisSerializer);
      redisTemplate.setHashKeySerializer(stringRedisSerializer);
      // 4.配置Value序列化
      Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
      ObjectMapper objMapper = new ObjectMapper();
      objMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
      objMapper.activateDefaultTyping(objMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
      jackson2JsonRedisSerializer.setObjectMapper(objMapper);
      redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
      redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
      // 5.初始化RedisTemplate
      redisTemplate.afterPropertiesSet();
      return redisTemplate;
  }
  @Bean
  public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
    return redisTemplate.opsForZSet();
  }
}

4.操作说明

在Spring环境中,可以@Autowired自动注入方式注入操作Redis对象。比如:RedisTemplate、ZSetOperations。

 @Autowired
  private RedisTemplate redisTemplate;
 @Autowired
  private ZSetOperations zSetOperations;

更新浏览量(不用去更新到mysql了)

     //这个完全采用redis设计就可以 不用查询数据库 把阅读量完全加入到缓存中  
    public void updateReadCount(Integer blogId) {
        zSetOperations.incrementScore(BLOG_KEY, blogId, 1);
        //blogMapper.updateReadCount(blogId); 不用在mysql数据库更新了
    }

取出榜单TopK(效率提高不用在数据库中查出所有的然后取前20)

    public List<Blog> selectTop() {
        List<Blog> blogList = new ArrayList<>();
        Long size = zSetOperations.size(BLOG_KEY);
        Set<Object> zset;
        if(size > TopN){
            zset = zSetOperations.reverseRange(BLOG_KEY, 0, TopN - 1);
        }else{
            zset = zSetOperations.reverseRange(BLOG_KEY, 0, - 1);
        }
        for(Object x:zset){
            blogList.add(blogMapper.selectById((int)x));
        }
        return blogList;
    }

显示浏览量(直接设定到mysql属性就好)

        Double score = zSetOperations.score(BLOG_KEY, blog.getId());
        int readCount = (score != null) ? score.intValue() : 0;
        blog.setReadCount(readCount);

总结

如果要效率提高,必须得牺牲空间,本操作还可以进一步优化!

比如把blog全部存到Redis,再找前TopK时候就不用去根据blog ID去mysql数据库搜索,直接可以输出

但是如果博客过多的话 占用Redis内存太大

到此这篇关于Springboot 使用Redis中ZSetOperations实现博客访问量的文章就介绍到这了,更多相关Springboot 博客访问量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Struts2学习教程之自定义类型转换器的方法

    Struts2学习教程之自定义类型转换器的方法

    类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换。下面这篇文章主要给大家介绍了关于Struts2学习教程之自定义类型转换器的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • SpringBoot3.x打包Docker容器的实现

    SpringBoot3.x打包Docker容器的实现

    这篇文章主要介绍了SpringBoot3.x打包Docker容器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java RSA加密解密实现方法分析【附BASE64 jar包下载】

    Java RSA加密解密实现方法分析【附BASE64 jar包下载】

    这篇文章主要介绍了Java RSA加密解密实现方法,结合实例形式分析了java基于第三方类库javabase64-1.3.1.jar实现RSA加密解密功能的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • 深入理解Spring中RabbitMQ的Channel

    深入理解Spring中RabbitMQ的Channel

    这篇文章主要介绍了深入理解Spring中RabbitMQ的Channel,在RabbitMq中,channel表示逻辑连接或者叫虚拟连接,是棣属于TCP连接的,一个TCP连接里可以创建多个channel,在Rabbit MQ里,消息的发送和接收都是基于channel的,需要的朋友可以参考下
    2023-08-08
  • Spring细数两种代理模式之静态代理和动态代理概念及使用

    Spring细数两种代理模式之静态代理和动态代理概念及使用

    代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。可以不修改目标对象,对目标对象功能进行拓展。在我们学习Spring的时候就会发现,AOP(面向切面编程)的底层就是代理
    2023-02-02
  • SpringBoot项目启动报错踩坑实战记录

    SpringBoot项目启动报错踩坑实战记录

    这篇文章主要给大家介绍了关于SpringBoot项目启动报错踩坑的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 带你入门Java的数组

    带你入门Java的数组

    这篇文章主要给大家介绍了关于Java中数组的定义和使用的相关资料,,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • java 实现Comparable接口排序,升序、降序、倒叙

    java 实现Comparable接口排序,升序、降序、倒叙

    这篇文章主要介绍了java 实现Comparable接口排序,升序、降序、倒叙,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Springboot接收文件与发送文件实例教程

    Springboot接收文件与发送文件实例教程

    最近工作中遇到个需求,springboot简单的上传文档或者图片,并且进行操作,操作完后进行保存指定路径,下面这篇文章主要给大家介绍了关于Springboot接收文件与发送文件的相关资料,需要的朋友可以参考下
    2023-05-05
  • IDEA中配置Tomcat全过程

    IDEA中配置Tomcat全过程

    文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本或配置文件以确保生效
    2025-08-08

最新评论