我们的项目牵涉到跨库跨表,使用ElasticSearch来解决。比较麻烦的是,ElasticSearch设置的in数量不可以超过500。在部门和人员数量少的时候这些并不是问题,然而对于某些大客户,他们的部门和人员的数量查出来之后仍然非常巨大,所以就采用了,分割开再合并的做法。这样的做法带来一个问题就是查询非常耗时,给客户带的体验不好。为了解决这个慢问题,使用redis做缓存,把要做的查询,放在凌晨查询,一天查一次。虽然可能出现误差,不过影响是可控的。
redis有五种数据结构。String,Hash,Set,SortedSet,List。
1.String
String类似于Java的Hashmap,需要指定key和value,都是String类型。使用的时候get("")就可以。我们还可以设置一下它的过期时间。
举个栗子,你想存一个List<Object>,有效期时间是24小时。首先设置key,key可以按照项目的需要命名,value由于是一个String,可以使用阿里的fastjson,JSONArray.toJSONString(),取得时候可以这么做
JSONArray jsonArray = JSONArray.parseArray(redisString);
for (int i =0; i < jsonArray.size(); i++) {
staffBirthdayList.add(jsonArray.getObject(i, StaffBirthday.class));
}
设置一下过期时间,以秒为单位。
2.Hash
Hash类似于Java的对象。比如这个Hash名称是Student,学生有姓名和年龄。你可以设置hmset Student name zhanghua age 18,更多更详细的只是可以参考下面:
https://www.cnblogs.com/guangye/p/7441936.html
3.List
List是一个队列,有顺序的,可以重复。
https://www.cnblogs.com/idiotgroup/p/5575236.html
4.Set
Set是一个集合,它的特点是不可重复,它的无序的。
5.SortedSet
SortedSet是Set的一个变种,在插入元素的时候指定元素的顺序,从而实现有顺序。所以对比List和Set它的效率是最低的。
所以,使用哪种数据结构可以根据自己的需要。