springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作_Redis

来源:脚本之家  责任编辑:小易  

1、redis功能是提供缓存服2113务的,spring与各5261中间件集成后一般也只提供中4102间件自己的功1653能。2、cpu、内存等状态监控并不是redis的功能,所以你不能通过它来查看。3、你可以通过actuator来查看cpu、内存等信息。追问我想要的是 redis info信息。追答下一个radis的客户端www.zgxue.com防采集请勿采集本网。

springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作

首先可以在多台服务器装memcached,启动时分别指定容量和端口 访问时采用集群方式访问,只需要spring配置文件里面配置即可 value可以放任何对象,包括集合 每个键值的生命周期可以在放入时独立设置 类库可以用spymemcached 数据更新方式可以

前言

第一次写博客,记录一下:

是的你只需要在你的配置文件稍微配置一下就能用,把我们项目的redis配置给你参考一下 redis: host: port: password: # 连接超时时间(毫秒) timeout: 10000 pool: # 连接池中的最大空闲连接 max-idle: 100 # 连接池中的最小空闲连接 min-idle: 1

在这里插入图片描述

最近做了一个帖子的收藏、点赞数量的功能,其实之前也做过类似的功能,因为之前一直使用的mysql 总是感觉对于这种频繁需要改变的值,不应该给予Mysql过大的压力,本文章采用的是redis 做了持久化。下面贴出关键代码:DataResponse是项目中使用的结果封装实体类;forumDTO是此功能的参数实体,如果有需要请留言。

1、在pom文件中引入即可 org.springframework.boot spring-boot-starter-redis 2、编写一个CacheService接口,使用redisCacheServiceImpl实现这个接口 官网的原文是这样的,也就是说,提供三个接口注入和你自己实现的其他实现类,默认是本地端口

常量如下:

使用手机自带管理器打开c盘::cache文件夹是缓存目录,建议大家定时清空。:所有temp文件夹

private static final String DEFAULT_VALUE = "0:0:0:0:0:0"; public static final Byte BYTE_ZERO = 0; public static final Byte BYTE_ONE = 1; public static final Byte BYTE_TWO = 2; public static final Byte BYTE_THREE = 3; public static final Byte BYTE_FOUR = 4; public static final Byte BYTE_FIVE = 5; public static final Byte BYTE_SIX = 6;

1、pom文件引入即 org.springframework.boot spring-boot-starter-redis 2、编写CacheService接口使用redisCacheServiceImpl实现接口 官网原文说提供三接口注入自实现其实现类默认本端口号6379redis You can inject an auto-configured RedisCon

@Override public DataResponse keepNum(ForumDTO forumDTO) { //将帖子id 设置为 key String key = forumDTO.getPostId().toString(); //get 用户id String userId = forumDTO.getUserId(); String count, newCount; //绑定数据集key BoundHashOperations<String, Object, Object> post = redisTemplate.boundHashOps("post:"); //获取hKey // count: 0论坛-点赞量 1评论量 2收藏量 3浏览 4评论-点赞量 if (null == post.get(key)) { //无则set post.put(key, DEFAULT_VALUE); //再取出来赋值给 count count = post.get(key).toString(); } else { //有直接赋值 count count = post.get(key).toString(); } // operationType 1 浏览 2 帖子点赞 3 收藏 4评论-点赞 String prefix; switch (forumDTO.getOperationType()) { case 1: //记录浏览次数 OPERATIONTYPE 1 : 记录浏览次数 newCount = resetValue(count, BYTE_THREE, true); post.put(key, newCount); break; case 2: //记录帖子-点赞 prefix = "thumbs:post"; switch (forumDTO.getClickType()) { case 0: /** * OPERATIONTYPE 2: + CLICKTYPE 0 = 给帖子点赞 * 0点赞 * 从redis中获取数量 帖子d 例如:177488r88t78r78r7 * count: 0论坛-点赞量 1评论量 2收藏量 3浏览 4评论-点赞量 * 避免每种数量都去查询redis 直接通过 redis value 记录所有的数量 * 获取加 +1 后的值 */ if (redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) { return DataResponse.fail("不能重复点赞哦"); } else { redisTemplate.opsForSet().add(prefix + ":" + key, prefix + ":" + userId); } newCount = resetValue(count, BYTE_ZERO, true); //set to redis post.put(key, newCount); break; case 1: //OPERATIONTYPE 2: + CLICKTYPE 1 = 取消帖子点赞 //1取消帖子点赞 if (!redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) { //重复处理 return DataResponse.fail("不能重复取消哦"); } else { //删除 redisTemplate.opsForSet().remove(prefix + ":" + key, prefix + ":" + userId); } newCount = resetValue(count, BYTE_ZERO, false); post.put(key, newCount); break; } break; case 3: prefix = "collection:post"; List<MqMessage> sendList = new LinkedList<>(); MqMessage mqMessage = new MqMessage(); switch (forumDTO.getClickType()) { //OPERATIONTYPE 3 + CLICKTYPE 0 = 记录收藏 case 0: //数量+1 //根据用户id + 帖子id 查询redis 数据 if (redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) { //重复处理 return DataResponse.fail("不能重复收藏哦"); } //add redisTemplate.opsForSet().add(prefix + ":" + key, prefix + ":" + userId); //set to redis newCount = resetValue(count, BYTE_TWO, true); post.put(key, newCount); mqMessage.setType(new Byte("9")); mqMessage.setSenderId(userId); mqMessage.setPostId(forumDTO.getPostId()); sendList.add(mqMessage); this.sendMq.send(sendList); break; //OPERATIONTYPE 3 + CLICKTYPE 1 = 取消收藏 case 1: //取消收藏 //尝试从redis取出当前用户是否已经收藏 if (!redisTemplate.opsForSet().isMember(prefix + ":" + key, prefix + ":" + userId)) { //重复处理 return DataResponse.fail("不能重复取消哦"); } //删除 redisTemplate.opsForSet().remove(prefix + ":" + key, prefix + ":" + userId); newCount = resetValue(count, BYTE_TWO, false); post.put(key, newCount); mqMessage.setType(new Byte("10")); mqMessage.setSenderId(userId); mqMessage.setPostId(forumDTO.getPostId()); sendList.add(mqMessage); this.sendMq.send(sendList); break; } break; case 4: //记录评论-点赞 // OPERATIONTYPE 4: + CLICKTYPE 0 = 给评论点赞 if (null == forumDTO.getCommentId()) { return DataResponse.fail("评论id不能为空"); } String commentNum, ckey = forumDTO.getCommentId().toString(); BoundHashOperations<String, Object, Object> comment = redisTemplate.boundHashOps("post:comment"); if (null == comment.get(ckey)) { //无则set comment.put(ckey, "0"); //再取出来赋值给 count commentNum = comment.get(ckey).toString(); } else { //有直接赋值 count commentNum = comment.get(ckey).toString(); } //赞评论 prefix = "thumbs:comment"; switch (forumDTO.getClickType()) { case 0: /** * 0点赞 * 从redis中获取数量 帖子d 例如:177488r88t78r78r7 * count: 0论坛-点赞量 1评论量 2收藏量 3浏览 4评论-点赞量 * 避免每种数量都去查询redis 直接通过 redis value 记录所有的数量 * 获取加 + 后的值 */ if (redisTemplate.opsForSet().isMember(prefix + ":" + ckey, prefix + ":" + userId)) { return DataResponse.fail("不能重复点赞哦"); } else { redisTemplate.opsForSet().add(prefix + ":" + ckey, prefix + ":" + userId); } //set to redis comment.put(ckey, cResetValue(commentNum, true)); break; case 1: //1取消评论点赞 if (!redisTemplate.opsForSet().isMember(prefix + ":" + ckey, prefix + ":" + userId)) { //重复处理 return DataResponse.fail("不能重复取消哦"); } else { //删除 redisTemplate.opsForSet().remove(prefix + ":" + ckey, prefix + ":" + userId); } newCount = cResetValue(commentNum, false); comment.put(ckey, newCount); break; } break; default: DataResponse.fail(ResponseEnum.FAILED); } return DataResponse.success(ResponseEnum.SUCCESS); }

 

resetValue代码:

/** * 功能描述: <br> * 〈点赞数、收藏数等数量重置〉 * @param val 数组 * @param type 0帖子点赞量 1评论量 2收藏量 3浏览 4评论点赞量 * @param isPlus 是否增加数量 true + false - * @Return: java.lang.String * @Author:王震 * @Date: 2020/8/5 10:27 * StringUtils包:import org.apache.commons.lang3.StringUtils; * 可以使用jdk的包替代split方法;但jdk的包需要验证正则,效率较低。 */ private String resetValue(String val, int j, boolean isPlus) { String[] value = StringUtils.split(val, ":"); Long temp = Long.valueOf(value[j]); StringBuffer sb = new StringBuffer(16); if (isPlus) { temp += 1; } else { temp -= 1; } value[j] = temp.toString(); for (int i = 0, len = value.length; i < len; i++) { if (i != len - 1) { sb.append(value[i]).append(":"); }else { sb.append(value[i]); } } return sb.toString(); }

总结

到此这篇关于springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作的文章就介绍到这了,更多相关springboot +redis实现点赞收藏评论内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:SpringBoot+Vue+Redis实现单点登录(一处登录另一处退出登录)SpringBoot Redis配置Fastjson进行序列化和反序列化实现SpringBoot集成Redisson实现分布式锁的方法示例springboot整合redis集群过程解析基于redis实现的点赞功能设计思路详解

可以用集合saddsadd key value内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • redis持久化的介绍
  • 详解redis scan命令实现有限保证的原理
  • redis数据导入导出以及数据迁移的4种方法详解
  • redis中数据类型命令整理
  • 详解redis开启远程登录连接
  • redis如何优雅的删除特定前缀key
  • redis教程(九):主从复制配置实例
  • 异步redis队列实现 数据入库的方法
  • 利用ganglia监控redis的最新解决方法
  • redis中lru淘汰策略的深入分析
  • 如何使用redis缓存来实现用户最近浏览的商品列表
  • spring-boot-starter-data-redis能否获取动态监控信息
  • spring boot + redis 实现shiro集群为什么请求一次...
  • 请问java代码编写客户端,实现退出操作时,需要删除r...
  • SpringBoot集成Redis来实现缓存技术方案有哪些
  • SpringBoot整合redis后,是否自带了连接池管理
  • springboot怎么添加redis依赖
  • spring-boot-starter-data-redis 怎样删除缓存
  • springboot 怎么建立测试redis
  • springboot 整合redis怎么定时更新没有sql数据
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页springboot+vue+redis实现单点登录(一处登录另一处退出登录)springboot redis配置fastjson进行序列化和反序列化实现springboot集成redisson实现分布式锁的方法示例springboot整合redis集群过程解析基于redis实现的点赞功能设计思路详解redis持久化的介绍详解redis scan命令实现有限保证的原理redis数据导入导出以及数据迁移的4种方法详解redis中数据类型命令整理详解redis开启远程登录连接redis如何优雅的删除特定前缀keyredis教程(九):主从复制配置实例异步redis队列实现 数据入库的方法利用ganglia监控redis的最新解决方法redis中lru淘汰策略的深入分析超强、超详细redis数据库入门教程redis常用命令、常见错误、配置技redis操作命令总结redis中5种数据结构的使用场景介64位windows下安装redis教程redis中使用redis-dump导出、导入redis中统计各种数据大小的方法redis常用命令小结让redis在你的系统中发挥更大作用centos 6.6下redis安装配置记录redis分析慢查询操作的实例教程利用ganglia监控redis的最新解决方法redis的使用模式之计数器模式实例redis事务常用操作详解redis禁止几个危险命令的方法centos7.5使用mysql_multi方式安装mysql5redis通过位图法记录在线用户的状态详解在redhat6.4安装redis集群【教程】redis如何使用lua脚本实例教程redis实现分布式锁的方法示例
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved