redis.SAdd("users:C:followers", "A");
// User C follows B
redis.SAdd("users:C:following", "B");
redis.SAdd("users:B:followers", "C");
// 2.1 B send tweet
int tid = redis.Incr("tweets:next_id");
redis.Set("tweets:" + tid, "B publish hello");
redis.LPush("global:timeline", tid);
redis.LPush("users:B:timeline", tid);
for (Object follower : redis.SMembers("users:B:followers"))
redis.LPush("users:" + follower + ":timeline", tid);
// 2.2 C send tweet
tid = redis.Incr("tweets:next_id");
redis.Set("tweets:" + tid, "C publish world");
redis.LPush("global:timeline", tid);
redis.LPush("users:C:timeline", tid);
for (Object follower : redis.SMembers("users:C:followers"))
redis.LPush("users:" + follower + ":timeline", tid);
Object[] tids = redis.LRange("global:timeline", 0, 9);
String[] tweetids = new String[tids.length];
for (int i = 0; i < tids.length; i++)
tweetids[i] = "tweets:" + tids[i];
System.out.println(Arrays.toString(redis.MGet(tweetids)));
}
}
package com.cdai.studio.redis;
import java.util.Arrays;
public class RedisTest {
public static void main(String[] args) {
RedisDB redis = new RedisDB();
// 1.Create user follow relationship
redis.SAdd("users", "A", "B", "C");
// User A follows B, C
redis.SAdd("users:A:following", "B", "C");
redis.SAdd("users:B:followers", "A");
redis.SAdd("users:C:followers", "A");
// User C follows B
redis.SAdd("users:C:following", "B");
redis.SAdd("users:B:followers", "C");
// 2.1 B send tweet
int tid = redis.Incr("tweets:next_id");
redis.Set("tweets:" + tid, "B publish hello");
redis.LPush("global:timeline", tid);
redis.LPush("users:B:timeline", tid);
for (Object follower : redis.SMembers("users:B:followers"))
redis.LPush("users:" + follower + ":timeline", tid);
// 2.2 C send tweet
tid = redis.Incr("tweets:next_id");
redis.Set("tweets:" + tid, "C publish world");
redis.LPush("global:timeline", tid);
redis.LPush("users:C:timeline", tid);
for (Object follower : redis.SMembers("users:C:followers"))
redis.LPush("users:" + follower + ":timeline", tid);
Object[] tids = redis.LRange("global:timeline", 0, 9);
String[] tweetids = new String[tids.length];
for (int i = 0; i < tids.length; i++)
tweetids[i] = "tweets:" + tids[i];
System.out.println(Arrays.toString(redis.MGet(tweetids)));
}
}
5.需要注意的问题
byte数组的equals和hashcode默认实现比较对象地址的,要借助于Arrays的equals和hashcode方法。
String字符串序列化和反序列化时要注意编码格式的问题,编码解码时应该使用相同的编码。
HashSet上的操作,removeAll补集,retainAll交集,addAll并集。
6.更加强大的Redis
Redis自己实现了各种数据结构,可以非常方便地增删改查,并且效率很高。这里我们只是用
Java来简单的学习了下Redis基本功能,其实Redis还支持很多其他的高级功能,如消息订阅、
数据过期设置、事务、数据持久化。想要进一步学习的话可以试着用Java实现它们
作者:dc_726