兽兽哥
你好。我想请教你一个业务的场景。
如果我有一个资产表asset,里面有大概20多个属性。这个表的数据很多,大概有1百W数据这样。但是每一个资产有唯一性,每一次进行新增或者修改的时候,都会穷举遍历一下全表,查询一下有没有重复,假如没有重复就新增,如果存在就修改。现在有一个批量导入的功能,每一次都要导入几百个资产(这些资产有可能已经存在,有可能是增量来的),目前每一个新的资产都要跟全量表一一穷举比较,这样的效果非常慢,效率严重不高。我也想过用静态缓存处理,每隔一段时间(例如每2个小时查询一次全量数据存储在List<Asset>集合,然后转化成Map去key-value去检查是否存在,这样勉强解决)但是不能做到实时性,这样会导致一些数据已经新增了,却没办法实时判断。
所以,我今天研究了redis,我不知道能不能用redis来解决我目前的业务场景问题?
所以,希望兽兽哥能够详细给我解答一下,谢谢。
8 回复
定期运行类似代码?
final Jedis jedis = xxxxx;
dao.each(UXXX.class, null, new Each(){
jedis.set(xxxkey, "1");
});
查询时
return jedis.get(xxxxkey);
@wendal 具体的业务逻辑应该如何处理?每一次新增、删除、更新表的时候,都要在redis做相应的操作吗?我不知道redis能否支持List<对象>这种格式?请兽兽哥,详细解答一下?
@qq_6427b776 redis没有对象
来自炫酷的 NutzCN
这个表应该有主键吧?复合主键?
上redis,数据库的事务肯定被打破,因为redis没有真正的事务,没有rollback这种东西,更没有事务隔离。
真要试redis的话,先去官网把redis的几个数据结构弄清楚。
来自炫酷的 NutzCN
@wendal 这样子呀,就一个id为主键。但是从业务上,是资产类型(type) + (资产ip) + 资产所在的业务系统(businessId)作为唯一性去判断。如果redis没有事务性,那在系统上很难控制关系模型数据库(我用的是oracle)与redis的资产同步问题,因此我也没有办法做到将资产全量放到redis,直接从磁盘去判断。
那这样的话,redis与web系统的运用场景,一般是如何的?可以举个例子说明一下吗?
@qq_6427b776 例子?百度有一堆,本论坛的也用redis,源码在页脚。
来自炫酷的 NutzCN
@qq6427b776 我原来的想法,是数据库和redis两边同时做到同步,这样保证了数据库的业务性,数据库也有全量的资产,redis也有全量的资产,从业务上,redis仅仅做到实时存储资产的作用,主要用来从系统上新增/修改资产从redis上判断?
兽兽哥,这想法能否走得通?
@qq_6427b776 试试呗
来自炫酷的 NutzCN
添加回复
请先登陆