Redis使用zset实现关注和粉丝以及共同关注的一些实现方法
很早之前做项目的时候做过这方面的设计用的是set,当然也可以用Hash和zset,用set来做因为没有score属性,所以在记录关注时间和顺序方面没有考虑,改用zset可以用时间戳作为score,既能保证时间的记录也能保证关注顺序的记录,还是比较方便的。
在共同关注方面set用的sinter或sinterstore,zset用zinterstore,使用事务尽可能保证关注和被关注操作的原子性(当然redis的事务是不能保证原子性的,若队列中存在语法错误,除了这句其他操作还是会执行)。
代码中用到的JedisPoolUtil工具类在之前发的文章中有发过
import java.util.List;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Transaction;
public class RalationUtil {
private Jedis jedis=null;
private JedisPool jedisPool=JedisPoolUtil.getInstance();
/**
* @功能 设置关注和粉丝关系
* @参数 用户id,被关注用户id
* @返回值 事务执行结果boolean
*/
public boolean setFollow(String user_id, String other_id) {
try {
jedis=jedisPool.getResource();
String user_follow=user_id+":MyFollow"; //redis中用户关注列表key值
String other_fan=other_id+":Fan"; //redis中被关注用户粉丝列表key值
Double time=(double) (System.currentTimeMillis(