我正在使用在集群环境中无效的InMemoryTokenStore
。我必须将令牌存储在我们可以在集群环境中轻松访问它的位置。
我无法使用JdbcTokenStore
,因为我无法访问数据库。
我想要使用' Ehcache'或者' RedisTokenStore'。请帮助我哪种更好的方法以及如何使用它。
答案 0 :(得分:1)
我在我的集群应用程序中使用了Apache Ignite data grid,它是JCache(JSR 107)规范的一个实现。
您可以通过以下方式设置缓存:
Ignite ignite = Ignition.ignite();
CacheConfiguration<CacheKey, Object> cacheCfg = new CacheConfiguration<CacheKey, Object>(cacheName.toString());
cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setBackups(1);
cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 604800)));
IgniteCache<CacheKey, Object> igniteCache = ignite.getOrCreateCache(cacheCfg);
然后您可以使用缓存来获取/放置OAuth2访问令牌,如下所示:
igniteCache.get(key);
igniteCache.put(key, o);
答案 1 :(得分:0)
首先,你有一个集群环境,这意味着,你的 应用程序正在处理严肃的业务逻辑。
将inMemory
数据从一个servlet container
转换为另一个{<1}}实际上昂贵。好的是你已经意识到要提出更好的解决方案。
EhCache用于维护a中所有节点的缓存 集群环境。
EhCache本身不是一种缓存,只是一种工具。也, EhCache没有维护缓存,只是触发了一些缓存 跨节点的动作/服务,以便每个节点都可以 重新刷新/更新自己的缓存。
Redis在分布式环境中运行得非常好,特别是在 Redis Sentinel和Redis Cluster。我的建议是 Redis
这些教程将帮助您了解实施: