java 项目,要用到两个数据结构1 {province : set<phonenumber>}2 {phonenumber: {"username": username, "status": status }}用的时候大致是时不时插入或者删除电话号码到1的set里(删除要用到定时机制或者超时机制)或者根据省份查1得到集合set,然后在2里遍历这个电话号码的集合
单项目使用,不用和其他服务共享数据自建缓存的话要用到hashset hashmap/concurrenthashmap ,还要定时器redis的话直接用,但是用redis的性能和自建缓存比有明显差别吗?
10 回答
守候你守候我
TA贡献1802条经验 获得超10个赞
- 估算数据量,及数据增长趋势,如果内存能够承受,可以用Map,我试过往Map里放500M的数据,可以承受的
- 如果用redis,考虑网络IO的延迟
- 不要过早优化,如果目前内存够用,没必要上第三方缓存,开发的时候采用接口编程,如果以后换了再换实现就行了
GCT1015
TA贡献1827条经验 获得超4个赞
1.Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,redis 的性能当然比自建缓冲的性能好,毕竟 redis 是经过大量实践和改进的,如果项目不上线,另说,你可以尝试下
2.缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
叮当猫咪
TA贡献1776条经验 获得超12个赞
如果只考虑性能,自建缓存必然比redis高效。
因为你是单应用,如果内存足够的话自建的内存缓存(例如concurrenthashmap )完全可以满足需求
也可以使用第三方缓存类,例如Google Guava 缓存类(不用你自己写定时器去清除缓存)。
//Google Guava缓存的例子
Cache<String, String> cache = CacheBuilder.newBuilder()//
.expireAfterAccess(1000, TimeUnit.MILLISECONDS)//
.build();
cache.put("key1", "value");
String value = cache.getIfPresent("key1");
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
要是数据量小的话,可以直接使用同步集合(避免数据不一致),因为程序级的内存使用肯定要比通过网络请求的缓存效率高。但是问题是你的程序重启时,你每次都要重新加载数据到内存中,还要自己写定时任务修改数据,对于自己随便写的程序,可以这样做,如果是商业程序,不建议这么做。
redis在商业程序或者数据量比较大的时候需要用的。
添加回答
举报
0/150
提交
取消