目前平台端和应用端会用RabbitMQ去同步部分数据,但是由于应用端这边的开发人员对数据处理的逻辑习惯和接口调用频繁程度与平台端不一样,所以数据需要进行一些处理。
场景是字典类型的code的JSONArray查询并转换成字符串拼接的中文名称
因为是在MQ监听到消息之后执行的保存动作,所以尽量提高效率,所以没有走redis缓存,而是用了jvm缓存。JVM 缓存其实说白了也就是将数据存储在虚拟机的堆上,更直白一点就是将数据缓存在 Java 对象中,这样当我们再去访问数据的时候,就不再需要同别的系统来进行交互,可以进一步的提升系统的性能。
@Component public class CacheMap<K, V> { private ConcurrentHashMap<K, V> concurrentHashMap = new ConcurrentHashMap<>(); public void put(K key, V value) { concurrentHashMap.put(key, value); } public V get(K key) { return concurrentHashMap.get(key); } public void remove(K key) { concurrentHashMap.remove(key); } public boolean containsKey(K key) { return concurrentHashMap.containsKey(key); } }
@Component注解实现单例,ConCurrentHushMap保证了线程安全,其实HashTable也保证了线程安全,但是ConCurrentHushMap是分布式锁,效率会高于HashTable的整体锁。具体等有时间会好好分析一下。
这只是一个demo,还没有设计过期时间,因为项目目前还没有很多这方面的需要,整体优化的话需要引入Ecache这个依赖来实现。Ehcache是用来管理缓存的一个工具,mybatis、hibernate底层都使用了Ehcache,以后项目优化最好是做redis+jvm双层缓存,这样的话在高并发的情况下才会更好得减少服务器压力。