springboot +redis 实现点赞、浏览、收藏、评论等数量的增实现点赞、浏览、收藏、评论等数量的增
减操作减操作
springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作
前言前言
第一次写博客,记录一下:
最近做了一个帖子的收藏、点赞数量的功能,其实之前也做过类似的功能,因为之前一直使用的mysql 总是感觉对于这种频繁
需要改变的值,不应该给予Mysql过大的压力,本文章采用的是redis 做了持久化。下面贴出关键代码:DataResponse是项目
中使用的结果封装实体类;forumDTO是此功能的参数实体,如果有需要请留言。
常量如下:
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;
@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
评论0