问题描述
问题描述:模仿微博关注-粉丝 redis初步入门http://blog.nosqlfan.com/html/2938.html?ref=rediszt参考那个PHP的例子,我这个是java的,没有达到预期效果。代码如下:UserService.java接口类package com.redis.test;import java.util.Set;public interface UserService {// 关注用户public void follow(String userId);// 取消关注public void unfollow(String userId);// 关注了哪些人public Set<String> following();// 被哪些人关注(粉丝)public Set<String> followedBy();}UserServiceImpl.java接口实现类package com.redis.test;import java.util.Set;import redis.clients.jedis.Jedis;public class UserServiceImpl implements UserService {private String userId;private Jedis redisService;public UserServiceImpl(String userId) {this.userId = userId;this.redisService = new Jedis("localhost");}@Overridepublic void follow(String userId) {// 添加关注的人this.redisService.sadd("graph:user:{$this.userId}:following", userId);// 被关注的人添加this.redisService.sadd("graph:user:$userId:followed_by", this.userId);}@Overridepublic Set<String> following() {// 获取所关注的对象集合return this.redisService.smembers("graph:user:{$this.userId}:following");}@Overridepublic Set<String> followedBy() {// 获取被哪些编号进行关注return this.redisService.smembers("graph:user:{$this.userId}:followed_by");}@Overridepublic void unfollow(String userId) {// 移除关注列表this.redisService.srem("graph:user:{$this.userId}:following", userId);// 移除被关注列表/粉丝列表this.redisService.srem("graph:user:$userId:followed_by", this.userId);}}客户端操作测试类package com.redis.test;import java.util.Iterator;public class UserClient {/** *@description *@param args */public static void main(String[] args) {UserService user1 = new UserServiceImpl("1");UserService user2 = new UserServiceImpl("2");UserService user3 = new UserServiceImpl("3");//user1关注的人有2 3user1.follow("2");user1.follow("3");Iterator<String> it1 = user1.following().iterator();System.out.println("user1 following:");while(it1.hasNext()){System.out.print(it1.next()+" "); //预计结果为2 3//实际为1 2 3}//user2关注1 3user2.follow("1");user2.follow("3");//user3关注1user3.follow("1");Iterator<String> it11 = user1.followedBy().iterator();System.out.println("nuser1 followed_by:");while(it11.hasNext()){System.out.print(it11.next()+" "); //预计结果为2 3//实际为 无}}}Windows系统、redis2.0.2版本、jedis客户端这是什么问题呢。
解决方案
public Set<String> followedBy() { // 获取被哪些编号进行关注 return this.redisService .smembers("graph:user:{$this.userId}:followed_by"); } "graph:user:{$this.userId}:followed_by"这个是key?$this.userId在php里面表示变量。在java里面"graph:user:{$this.userId}:followed_by"这整个就是字符串。所以获取不到对应key的set。