我正在使用带有Hibernate Search 4.4.0的Infinispan和6.0.2.
在开始之后,我执行了一个类似的查询
CacheQuery cq = SearchManager.getQuery(query,Hibernate.class).projection("id");
Run Code Online (Sandbox Code Playgroud)
我用它cq.list()
来获取"id".
但是现在结果的数量达到了300.000,因为设计了DB(不能改变),重复的id几乎是29,000.
我写这个来获得"id":
for(int i=0;i<listObject.size();i++)
{
Object[] rdf = (Object[])listObject.get(i);
if(!result.contains((String) rdf[0]))
result.add((String) rdf[0]);
}
Run Code Online (Sandbox Code Playgroud)
但即使我将这一部分平行,也需要很长时间.
是否有一个函数来删除Hibernate中查询的重复ID,就像DISTINCT在SQL中那样?
我正在尝试将Infinispan配置为hibernate二级缓存.一切都很好,但我想调整默认配置,即所有缓存共享的值.
缓存是用于注明实体自动创建的@Cache
,我可以通过一个在对其进行自定义一个infinispan.xml
通过<distributed-cache-configuratoin>
.但是,我希望所有这些缓存都有默认值(例如驱逐策略).
另一件事是,我想将所有这些生成的缓存标记为"分布式"(默认情况下它们是"本地").
这是我的一个例外infinispan.xml
:
<cache-container default-cache="default" statistics="true">
<transport stack="external-file" />
<!-- Configuring specifics for the User entity. How to do it globally? -->
<distributed-cache-configuration name="user" statistics="true" />
</cache-container>
Run Code Online (Sandbox Code Playgroud)
我该怎么做这些事情?
最近,我加强了Keycloak部署,以使用专用的Infinispan群集作为remote-store
Keycloak各种缓存的额外持久层。更改本身进行得相当不错,尽管进行了更改之后,由于expired_code
错误消息,我们开始看到很多登录错误:
WARN [org.keycloak.events] (default task-2007) type=LOGIN_ERROR, realmId=my-realm, clientId=null, userId=null, ipAddress=192.168.50.38, error=expired_code, restart_after_timeout=true
Run Code Online (Sandbox Code Playgroud)
通常,在同一时间段内从同一IP地址重复多次多次出现此错误消息。造成这种情况的原因似乎是最终用户的浏览器在登录时会无限重定向,直到浏览器本身停止循环为止。
我已经看到了各种GitHub问题(https://github.com/helm/charts/issues/8355),也记录了此行为,并且共识似乎是这是由Keycloak群集无法正确发现其成员引起的通过JGroups。
当您考虑到某些Keycloak缓存在中的默认配置中分布在Keycloak节点上时,此解释才有意义standalone-ha.xml
。但是,我已将这些高速缓存修改为本地高速缓存,并remote-store
指向我的新Infinispan群集,并且我认为我对该运行方式做出了一些不正确的假设,导致此错误开始发生。
这是我的Keycloak缓存配置的方式:
WARN [org.keycloak.events] (default task-2007) type=LOGIN_ERROR, realmId=my-realm, clientId=null, userId=null, ipAddress=192.168.50.38, error=expired_code, restart_after_timeout=true
Run Code Online (Sandbox Code Playgroud)
请注意,与默认standalone-ha.xml
配置文件相比,此缓存配置的大部分保持不变。我在这里所做的更改是将以下缓存更改为local
并将它们指向我的远程Infinispan群集:
sessions
authenticationSessions
offlineSessions
clientSessions
offlineClientSessions
loginFailures
actionTokens
work
这是我的remote-cache
服务器的配置:
<subsystem xmlns="urn:jboss:domain:infinispan:7.0">
<cache-container name="keycloak" module="org.keycloak.keycloak-model-infinispan">
<transport lock-timeout="60000"/>
<local-cache name="realms">
<object-memory size="10000"/>
</local-cache>
<local-cache name="users">
<object-memory size="10000"/>
</local-cache>
<local-cache name="authorization">
<object-memory size="10000"/>
</local-cache>
<local-cache name="keys">
<object-memory size="1000"/>
<expiration …
Run Code Online (Sandbox Code Playgroud) 我计划在现有的Web应用程序中实现缓存解决方案.没有什么复杂的:基本上是支持溢出到磁盘和自动驱逐的并发映射.未来可能需要对缓存进行群集,但现在不需要.
我喜欢ehcache的copyOnRead和copyOnWrite功能,因为这意味着在修改我从缓存中取出的内容之前,我不必手动克隆内容.现在我已经开始关注Infinispan了,但我还没有找到相应的东西.它存在吗?
即,以下单元测试应通过:
@Test
public void testCopyOnWrite() {
Date date = new Date(0);
cache.put(0, date);
date.setTime(1000);
date = cache.get(0);
assertEquals(0, date.getTime());
}
@Test
public void testCopyOnRead() {
Date date = new Date(0);
cache.put(0, date);
assertNotSame(cache.get(0), cache.get(0));
}
Run Code Online (Sandbox Code Playgroud) 我最近开始研究Infinispan作为我们的缓存层.在阅读Infinispan中的操作模式后,如下所述.
首先,我现在很困惑,最适合我上述两种模式的应用.
我有一个非常简单的用例,我们有一个客户端代码,它将使用服务的主要VIP调用我们的REST服务,然后它将负载平衡到Service Server
我们部署服务的个人,然后它将交互使用Cassandra数据库检索用户ID的数据基础.下图将使一切清晰.
假设,例如,如果客户端正在寻找一些数据,userId = 123
那么它将使用主VIP调用我们的REST服务,然后它将负载平衡到我们的四个服务服务器中的任何一个,假设它被负载平衡到Service1,然后service1将调用Cassandra数据库获取记录userId = 123
,然后返回给客户端.
现在我们计划使用Infinispan缓存数据,因为压缩会破坏我们的性能,因此我们的读取性能可以得到一些提升.所以我开始研究Infinispan并发现了两种模式,如下所述.我不确定在我们的案例中使用Infinispan的最佳方式是什么.
其次,从Infinispan缓存来看,我将期待的是假设我使用嵌入式模式,那么它应该看起来像这样.
如果是,那么Infinispan缓存将如何相互影响?有可能在某个时候,我们将寻找那些将在另一个Service Instance Infinispan缓存上的userId的数据?对?那么在那种情况下会发生什么?infinispan会不会照顾这些事情?如果是的话,那么我需要进行哪些配置设置以确保此功能正常.
如果我遗失任何东西,请原谅我的无知.任何明确的信息都会让我对上述两个问题更清楚.
Apache Shiro允许CacheManager的一些实现.EHCache是这些实现之一.
我想使用Infinispan作为分布式缓存管理器.到现在为止,我不确定它是否可行.
有谁知道如何将Infinispan实现为Apache Shiro的CacheManager?谢谢
试图使用infinispan作为hibernate的二级缓存,但总是给我以下错误
org.infinispan.jmx.JmxDomainConflictException:ISPN000034:已经在'org.infinispan'JMX域下注册了JMX MBean实例type = CacheManager,name ="DefaultCacheManager".如果要允许在org.infinispan.jmx.CacheManagerJmxRegistration.updateDomain中的org.infinispan.jmx.JmxUtil.buildJmxDomain(JmxUtil.java:51)中的'globalJmxStatistics'配置元素中配置使用相同JMX域的多个实例启用'allowDuplicateDomains'属性(CacheManagerJmxRegistration.java:79)
这是hibernate属性
setProperty("hibernate.cache.use_second_level_cache", "true");
setProperty("hibernate.cache.use_query_cache", "true");
setProperty("hibernate.cache.region.factory_class",
"org.hibernate.cache.infinispan.InfinispanRegionFactory");
setProperty("hibernate.cache.infinispan.statistics", "false");
setProperty("hibernate.cache.infinispan.cfg", "infinispan-config.xml");
Run Code Online (Sandbox Code Playgroud)
infinispan配置文件
<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:infinispan:config:7.2"
xsi:schemaLocation="urn:infinispan:config:7.2
http://www.infinispan.org/schemas/infinispan-config-7.2.xsd
urn:infinispan:config:store:jdbc:7.2
http://www.infinispan.org/schemas/infinispan-cachestore-jpa-config-7.2.xsd">
<cache-container default-cache="default" statistics="false">
<local-cache name="simpleCache" statistics="false">
</local-cache>
</cache-container>
</infinispan>
Run Code Online (Sandbox Code Playgroud)
我有两个项目有两个数据源,一个用于审计,另一个是主要的Web项目.并且infinispan版本7.2中不存在异常中的xml值,提前感谢任何帮助:)
从 9.4.16.Final --> 10.0.1.Final 升级 infinispan-jcache 后,由于编组器错误,我无法使用缓存。
我希望它与 javax.cache.* 一起使用,v9.4.16.Final 就是这种情况。没有使用与 infinispan 相关的类。
在 v10.0.1.Final 中,我可以从缓存中放入和检索 UUID。但是在设置 CacheLoaderFactory 时失败。
进口
import javax.cache.Cache;
import javax.cache.Caching;
import javax.cache.configuration.MutableConfiguration;
import javax.cache.expiry.Duration;
import javax.cache.expiry.ModifiedExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheLoaderException;
Run Code Online (Sandbox Code Playgroud)
代码:
final var cachingProvider = Caching.getCachingProvider();
final var cacheManager = cachingProvider.getCacheManager();
final var config = new MutableConfiguration<String,UUID>();
config.setTypes( String.class, UUID.class );
config.setStoreByValue( false );
config.setExpiryPolicyFactory( ModifiedExpiryPolicy.factoryOf( Duration.FIVE_MINUTES ) );
config.setReadThrough( true );
config.setCacheLoaderFactory( () -> new CacheLoader<>() {
@Override
public UUID load(String key) throws …
Run Code Online (Sandbox Code Playgroud) 从 jboss as 7 迁移到 wildfly 15 后,infinispan 缓存容器的 jndi-name 对 wildfly 15 不再有效。
OPVDX001: Validierungsfehler in standalone.xml ---------------------------------
|
| 344:
| 345: <subsystem xmlns="urn:jboss:domain:infinispan:7.0">
| 346: <cache-container jndi-name="java:jboss/infinispan/my-container" name="my-container" module="org.infinispan.hibernate-cache">
| "cache-container"
| ^^^^ "jndi-name" ist kein zulässiges Attribut für das Element
|
| Die folgenden Attribute sind hier zulässig: aliases, default-cache,
| module, name, statistics-enabled
|
| 347: <local-cache name="my-other-container">
| 348: <expiration lifespan="900000" />
| 349: </local-cache>
|
| "jndi-name" ist zulässig bei Elementen:
Run Code Online (Sandbox Code Playgroud)
jndi-name 有替代品吗?
有没有办法查看cacheManager(org.springframework.cache.CacheManager
)中是否存在特定的键,因为我无法找到一种方法来做到这一点,因为没有containsKey
选项。如果有人可以向我展示一种检查缓存管理器中是否存在密钥的方法,我将不胜感激。以下是我迄今为止尝试过的一些事情 -
Cache cache=null;
for (String name : cacheManager.getCacheNames()) {
cache=cacheManager.getCache(name);
System.out.println("-------------->"+cache.get("dummyCache").get()); //this will give me null pointer exception as there is no dummyCache
}
Run Code Online (Sandbox Code Playgroud)
我想添加 if/else 检查以查看dummyCache
缓存中是否存在密钥