说明:
这一篇来讲解如何构建用户及发布动态,至于表中要存储什么信息可以自己定义
1构建用户
主要思路:要用到前面说的分布式锁,以防止同一时间反复的创建,代码:
public long createUser(String token,String name) throws InterruptedException {
token=token.toLowerCase();
HashOperations<String,String,String>hashOperations=template.opsForHash();
String lock=lockUtil.acquire_lock_with_timeou("user:"+token,1,10);
if(lock==null){
return -1;//如果没获得锁成功,说明不止一处在创建该用户
}
if(hashOperations.get("users:",token)!=null){
return -1;//如果users:表里已经有了该用户,就返回
}
long id=template.opsForValue().increment("user:id:");//
//这一步目的是获取用户专属的Id,因为user:id:一直在自增,并且用到了分布式//锁,所以不会造成重复现象的出现
template.setEnableTransactionSupport(true);//开启事物
template.multi();
hashOperations.put("users:",token,String.valueOf(id));//加入user表中
Map<String,String> values = new HashMap<String,String>();
values.put("login", token);
values.put("id", String.valueOf(id));
values.put("name", name);
values.put("followers", "0");
values.put("following", "0");
values.put("posts", "0");
values.put("signup", String.valueOf(System.currentTimeMillis()));
hashOperations.putAll("user:"+id,values);//创建User:id表,存储用户的单人信息
template.exec();
lockUtil.release_lock("user:"+token,lock);//最后一定要记得释放锁
return id;
}
2发布动态:
```java
public static long create_status(RedisTemplate template,long uid, String message, Map<String,String>data){
//让status:id自增一,获取用户login和id,然后添加data以及让用户的Posts自增1
template.setEnableTransactionSupport(true);
template.multi();
template.opsForHash().get("user:"+uid,"login");
//先获取user:id表里的login,用于后面的存储,当然也可以不存这个,无关紧要
template.opsForValue().increment("status:id:");
//获取动态的专属id,和上面的Userid类似原理
List<Object> result=template.exec();
String login=(String)result.get(0);
long id= (long) result.get(1);
if(login==null)return -1;
if(data==null)data=new HashMap<String,String>();
data.put("message", message);
data.put("posted", String.valueOf(System.currentTimeMillis()));
data.put("id", String.valueOf(id));
data.put("uid", String.valueOf(uid));
data.put("login", login);
template.multi();//开启事物
template.opsForHash().putAll("status:"+id,data);
//创建status:id表,存储动态的消息
template.opsForHash().increment("user:"+uid,"posts",1);
//让user:id表中的Posts键加1
template.exec();
return id;
}