我想知道是否有像memcached,velocity或sharedcache这样的分布式缓存系统允许我用不仅仅是它的名称标记内容,或者可以将项目与彼此关联,所以如果我使一个项目的缓存无效它也会使相关项目无效.
例如.如果我有两个引用相同数据并且数据发生变化的页面,我希望两个引用页面的缓存无效.
编辑:我在asp.net上
我对满足以下要求的开源消息传递和/或分布式缓存技术感兴趣.
任何想法,将不胜感激.如果任何解决方案需要特定的配置/定制以满足要求,请提及我需要做的事情.
编辑我并不是说暗示当前的答案是不相关的,但我的问题并不明确.请不要只指向阳光下的每个MQ和JSR-107库.只有您有理由相信我的要求.
嘿,我现在正在运行tomcat的春天ehcache.我有几个Web服务器运行他们自己的ehcache实例,我现在想要移动到共享/分布式缓存.我们不希望使用商业许可证,直到我们对其性能感到满意,并在我们扩展时需要更多正式支持.
令我困惑的是ehcache/teracotta网站.所有的文档似乎都是为了运行带有teracotta服务器的ehcache缓存,我可以让我的web服务器通过更新我的ehcache配置文件来连接...但是看起来这些指令是用于使用商业版本吗?
我现在真的不需要集群(并且可以理解这是否是企业许可证的一部分)但我以为我可以设置一个开源分布式缓存实例?有没有人有如何链接?或者只是关于如何从嵌入式实例迁移到共享实例的一般说明?
我有一个在Windows Server AppFabric SDK中找到的Microsoft.ApplicationServer.Caching.DataCache对象的扩展方法,如下所示:
using System;
using System.Collections.Generic;
using Microsoft.ApplicationServer.Caching;
namespace Caching
{
public static class CacheExtensions
{
private static Dictionary<string, object> locks = new Dictionary<string, object>();
public static T Fetch<T>(this DataCache @this, string key, Func<T> func)
{
return @this.Fetch(key, func, TimeSpan.FromSeconds(30));
}
public static T Fetch<T>(this DataCache @this, string key, Func<T> func, TimeSpan timeout)
{
var result = @this.Get(key);
if (result == null)
{
lock (GetLock(key))
{
result = @this.Get(key);
if (result == null)
{
result = func();
if …Run Code Online (Sandbox Code Playgroud) 我正在重构一个将进行大量计算的分析系统,我需要一些关于可能的架构设计的想法,以解决我面临的数据一致性问题.
当前架构
我有一个基于队列的系统,其中不同的请求应用程序创建最终由工作者使用的消息.
每个" 请求应用程序 "将大型计算细分为较小的部分,这些部分将被发送到队列并由工作人员处理.
当所有部分都完成后,原始的"请求应用程序"将合并结果.
此外,工作者使用来自集中式数据库(SQL Server)的信息来处理请求(重要:工作人员不会更改数据库上的任何数据,只会消耗它).

问题
好.到现在为止还挺好.当我们包含更新数据库信息的Web服务时,就会出现问题.这可能在任何时候发生,但至关重要的是,源自相同"请求应用程序"的每个"大计算"在数据库上看到相同的数据.
例如:
我不能让工人W2使用数据库的状态S1.为了使整个计算保持一致,它应该使用先前的S0状态.
思考
一种锁定模式,用于防止Web服务器在工作者消耗数据时更改数据库.
在数据库和worker(通过req.app控制db缓存的服务器)之间创建新层
我正在等待第二个解决方案,但对此并不十分自信.
有什么好主意吗?我设计错了,还是错过了什么?
OBS:
architecture sql-server distributed message-queue distributed-caching
我正在考虑在AWS上托管一个标准的Java Web应用程序,而新的Elastic Beanstalk(http://aws.amazon.com/elasticbeanstalk/)似乎拥有我们想要的大部分内容.我无法弄清楚的一件事是如何进行分布式缓存.AWS似乎不允许新节点的多播发现,因此我不确定自动扩展过程启动的新节点应该如何集成到现有的分布式缓存中.任何建议/最佳实践表示赞赏.
更新:理想情况下,这将是每个应用程序服务器实例的本地缓存.最佳案例场景是hibernate 2级缓存配置,如ehcache或terracota.
在Erlang中是否有任何分布式哈希表实现?我在网上搜索并发现了一些研究论文,但我没有找到成熟的实施方案.
分布式缓存是一种存储常见请求并支持快速检索的方法.
Tachyon是一个以内存为中心的分布式存储文件系统,可避免进入磁盘以加载经常读取的数据集.
这两者有什么不同?
我知道<min-eviction-check-millis>在hazelcast配置中定义了在检查此映射的分区是否可逐出之前应该通过的最短时间(以毫秒为单位).因此,在每个配置的间隔期间,将根据配置的驱逐策略在地图中执行驱逐.我有以下与此领域相关的问题.
Q1.驱逐操作是否在操作线程上运行?
Q2.驱逐操作会锁定它正在处理的整个分区吗?
Q3.如果我要遵循100毫秒的默认值(我相信这是一个非常小的值),我是否需要预期会有任何性能损失.
Q4.在以下情景中,驱逐行动的频率如何?
<map name="employees">
<in-memory-format>BINARY</in-memory-format>
<backup-count>1</backup-count>
<max-idle-seconds>1800</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<time-to-live-seconds>0</time-to-live-seconds>
<min-eviction-check-millis>1000</min-eviction-check-millis>
<max-size>0</max-size>
<eviction-percentage>0</eviction-percentage>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
</map>
Run Code Online (Sandbox Code Playgroud)
请注意,虽然没有配置驱逐策略和百分比,但最大空闲时间设置为1800秒.
上述问题的答案将帮助我在大规模部署中对这些配置所使用的值做出明智的决定.
java distributed-cache distributed-caching hazelcast hazelcast-imap
我需要IDistributedCache在我的应用程序中使用它,它可以是MemoryDistributedCache或RedisCache作为底层实现。我的理解是这些不是线程安全的,所以我使用ReaderWriterLockSlim.
ReaderWriterLockSlim允许多个线程进行读取或独占访问进行写入。现在我想知道它是否适合这项工作,MemoryDistributedCache以及RedisCache阅读方法是否是线程安全的。
至于整体解决方案 - 我知道从像 Redis 这样的分布式缓存中存储和读取值需要时间。但我没有太多选择,因为我存储的值获取和管理的速度更慢。
这是片段:
...
public async Task<byte[]> GetAsync(string key, CancellationToken token = new CancellationToken())
{
_cacheLock.EnterReadLock();
try
{
return await _cache.GetAsync(GetCacheKey(key), token);
}
finally
{
_cacheLock.ExitReadLock();
}
}
public async Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = new CancellationToken())
{
_cacheLock.EnterWriteLock();
try
{
await _cache.SetAsync(GetCacheKey(key), value, options, token);
}
finally
{
_cacheLock.ExitWriteLock();
}
}
public async Task RemoveAsync(string key, …Run Code Online (Sandbox Code Playgroud) caching ×4
java ×4
appfabric ×2
distributed ×2
.net-core ×1
alluxio ×1
apache-spark ×1
architecture ×1
c# ×1
ehcache ×1
erlang ×1
hashtable ×1
hazelcast ×1
memcached ×1
performance ×1
riak ×1
sql-server ×1
tagging ×1