1)常用方法
addZSet(String key, double score, String value) 向set中添加数据,score为权重,表示按照该值排序
Set<String> getZSet(String key, int start, int end) 向set中取数据
delZSet(String key, String member) 向set中删除数据,member只能是String,不能是json数据
delZSetByScore(String key,double start,double end) 通过权重删除ZSet中的数据,start=end时表示删除权重为多少的数据
如果addZSet方法添加的value是一个json数据的话,那么使用delZSet的话不行,要用delZSetByScore.
2) 假如有如下页面:
前台需要的是按时间排序好的数据,这样就不能只把json数据从redis中取出传到前台了。
这里想到的方法是插入一条数据时在redis中存入map数据,map的值为日期,value为json数据。
如下:
Date date = sign.getInsertTime();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
String signDate = s.format(date);
Map map = new HashMap();
if (RedisUtil.getString("sign_" + sign.getUserName()) != null) { //如果该用户在redis中有数据的话
map = JsonUtil.getMapFromJson(RedisUtil.getString("sign_"
+ sign.getUserName())); //取出该用户的map(日期,json数据)的值
JSONArray json = JSONArray.parseArray(JSONArray.toJSONString(map.get(signDate))); //signDate表示该条签名的发表日期,这里是要看该map中是否已经有该日期了,但是其实
//有没有的结果都是要把sign对象插入到json中去
json.add(sign);
map.put(signDate, json); //如果之前map中有该日期了,则重新给该日期赋值,如果没有则直接赋值
} else {
map.put(signDate, JSONArray.toJSON(sign));//把sign对象赋值给该日期
}
RedisUtil.addString("sign_" + sign.getUserName(), JSONObject
.toJSON(map).toString());
当删除一条数据时,如下:
Map map = new HashMap();
Date date = sign.getInsertTime();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
String signDate = s.format(date);
if (RedisUtil.getString("sign_" + sign.getUserName()) != null) {
map = JsonUtil.getMapFromJson(RedisUtil.getString("sign_"
+ sign.getUserName()));
JSONArray json = JSONArray.parseArray(JSONArray.toJSONString(map.get(signDate)));
List list = JsonUtil.getDTOList(json.toString(), SpaceSign.class); //json转换成list
for(int i=0;i<list.size();i++){
SpaceSign spaceSign = (SpaceSign)list.get(i);
if(spaceSign.getId()==signId){
list.remove(i);//删除该对象
}
}
json = JSONArray.parseArray(JSONArray.toJSONString(list)); //重新生成json对象
if(!json.isEmpty()){
map.put(signDate, json); //如果删除该对象后该日期依然有json数据,那么重新给该日期赋值
}
else{
map.remove(signDate); //如果删除该对象后该日期已无json数据,那么直接从map中删除该日期
}
}
RedisUtil.addString("sign_" + sign.getUserName(), JSONObject
.toJSONString(map));