Util
1 JedisAdapter
package com.cyq.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
//点赞功能利用set实现
@Service
public class JedisAdapter implements InitializingBean {
private static final Logger logger = LoggerFactory.getLogger(JedisAdapter.class);
private JedisPool pool;
@Override
public void afterPropertiesSet() throws Exception {
//新建连接池
pool = new JedisPool("redis://localhost:6379/10");
}
//新增
public long sadd(String key, String value) {
Jedis jedis = null;
try {
jedis = pool.getResource();
return jedis.sadd(key, value);
} catch (Exception e) {
logger.error("发生异常" + e.getMessage());
} finally {
if (jedis != null) {
jedis.close();
}
}
return 0;
}
//移除
public long srem(String key, String value) {
Jedis jedis = null;
try {
jedis = pool.getResource();
return jedis.srem(key, value);
} catch (Exception e) {
logger.error("发生异常" + e.getMessage());
} finally {
if (jedis != null) {
jedis.close();
}
}
return 0;
}
//计数
public long scard(String key) {
Jedis jedis = null;
try {
jedis = pool.getResource();
return jedis.scard(key);
} catch (Exception e) {
logger.error("发生异常" + e.getMessage());
} finally {
if (jedis != null) {
jedis.close();
}
}
return 0;
}
//是否存在
public boolean sismember(String key, String value) {
Jedis jedis = null;
try {
jedis = pool.getResource();
return jedis.sismember(key, value);
} catch (Exception e) {
logger.error("发生异常" + e.getMessage());
} finally {
if (jedis != null) {
jedis.close();
}
}
return false;
}
}
2 RedisKeyUtil:生成key字段
package com.cyq.util;
public class RedisKeyUtil {
private static String SPLIT = ":";
private static String BIZ_LIKE = "LIKE";
private static String BIZ_DISLIKE = "DISLIKE";
private static String BIZ_EVENTQUEUE = "EVENT_QUEUE";
//生成点赞字段
public static String getLikeKey(int entityType, int entityId) {
return BIZ_LIKE + SPLIT + String.valueOf(entityType) + SPLIT + String.valueOf(entityId);
}
//生成踩字段
public static String getDisLikeKey(int entityType, int entityId) {
return BIZ_DISLIKE + SPLIT + String.valueOf(entityType) + SPLIT + String.valueOf(entityId);
}
public static String getEventQueueKey() {
return BIZ_EVENTQUEUE;
}
}
Service
package com.cyq.service;
import com.cyq.util.JedisAdapter;
import com.cyq.util.RedisKeyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LikeService {
@Autowired
JedisAdapter jedisAdapter;
//获得点赞数量
public long getLikeCount(int entityType, int entityId) {
String likeKey = RedisKeyUtil.getLikeKey(entityType, entityId);
return jedisAdapter.scard(likeKey);
}
//获得点赞状态
public int getLikeStatus(int userId, int entityType, int entityId) {
String likeKey = RedisKeyUtil.getLikeKey(entityType, entityId);
//点赞状态 1
if (jedisAdapter.sismember(likeKey, String.valueOf(userId))) {
return 1;
}
//踩状态 -1 不踩不点赞0
String disLikeKey = RedisKeyUtil.getDisLikeKey(entityType, entityId);
return jedisAdapter.sismember(disLikeKey, String.valueOf(userId)) ? -1 : 0;
}
//点赞
public long like(int userId, int entityType, int entityId) {
//喜欢加,踩移除
String likeKey = RedisKeyUtil.getLikeKey(entityType, entityId);
jedisAdapter.sadd(likeKey, String.valueOf(userId));
String disLikeKey = RedisKeyUtil.getDisLikeKey(entityType, entityId);
jedisAdapter.srem(disLikeKey, String.valueOf(userId));
return jedisAdapter.scard(likeKey);
}
//踩
public long disLike(int userId, int entityType, int entityId) {
//喜欢移除,踩加
String disLikeKey = RedisKeyUtil.getDisLikeKey(entityType, entityId);
jedisAdapter.sadd(disLikeKey, String.valueOf(userId));
String likeKey = RedisKeyUtil.getLikeKey(entityType, entityId);
jedisAdapter.srem(likeKey, String.valueOf(userId));
return jedisAdapter.scard(likeKey);
}
}
Controller
package com.cyq.controller;
import com.cyq.async.EventModel;
import com.cyq.async.EventProducer;
import com.cyq.async.EventType;
import com.cyq.model.Comment;
import com.cyq.model.EntityType;
import com.cyq.model.HostHolder;
import com.cyq.service.CommentService;
import com.cyq.service.LikeService;
import com.cyq.service.MessageService;
import com.cyq.util.WendaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class LikeController {
@Autowired
LikeService likeService;
@Autowired
HostHolder hostHolder;
@Autowired
CommentService commentService;
@Autowired
EventProducer eventProducer;
//点赞
@RequestMapping(path = {"/like"}, method = {RequestMethod.POST})
@ResponseBody
public String like(@RequestParam("commentId") int commentId) {
if (hostHolder.getUser() == null) {
//未登录状态
return WendaUtil.getJSONString(999);
}
//通过id获得评论
Comment comment = commentService.getCommentById(commentId);
long likeCount = likeService.like(hostHolder.getUser().getId(), EntityType.ENTITY_COMMENT, commentId);
return WendaUtil.getJSONString(0, String.valueOf(likeCount));
}
//踩
@RequestMapping(path = {"/dislike"}, method = {RequestMethod.POST})
@ResponseBody
public String dislike(@RequestParam("commentId") int commentId) {
if (hostHolder.getUser() == null) {
return WendaUtil.getJSONString(999);
}
long likeCount = likeService.disLike(hostHolder.getUser().getId(), EntityType.ENTITY_COMMENT, commentId);
return WendaUtil.getJSONString(0, String.valueOf(likeCount));
}
}