cassandra内部API使用二2010-07-07

缓存读取机制
本文介绍了一种从Cassandra缓存中读取数据的方法,包括如何根据Key和Column获取缓存内容及其时间戳。通过使用Cassandra客户端池,提高了系统的效率和稳定性。
/**根据Key和column从缓存读取数据.
* @param aKeyArea Key
* @param aName column
* @return Object 缓存数据
*/
public Object get(String aKeyArea, String aName)
{
Map<String, Object> resultMap = getResultMap(aKeyArea, aName);

if (resultMap != null)
{
return resultMap.get(CacheConstants.CACHE_MAP_KEY_VALUE);
}
return null;
}

/**根据Key和column从缓存读取数据,包括timestamp.
* @param aKeyArea Key
* @param aName column
*
* @return Map<String, Object> 缓存数据
* key:"cache.timestamp", value:存放缓存数据时的timestamp
* key:"cache.value", value:缓存对象
*/
public Map<String, Object> getResultMap(String aKeyArea, String aName)
{
Map<String, Object> resultMap = new HashMap<String, Object>();
CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
// 取得客户端(群集服务器)
CassandraClient client = null;
try
{
// 从群集服务器获得一个客户端
client = pool.borrowClient(mCassandraClient);

// Keyspace
Keyspace keyspace =
client.getKeyspace(mDefaultKeyspace);
// ColumnPath
ColumnPath columnPath = new ColumnPath(mDefaultColumnFamily);
columnPath.setColumn(bytes(aName));

// 从缓存读取
Column col = keyspace.getColumn(aKeyArea, columnPath);

byte[] objBytes = col.getValue();
// 由微秒转换为毫秒
long timestamp = col.getTimestamp()
/ CacheConstants.MICROSECONDS_PER_MILLISECONDS;

// 从字节数组获取对象
Object obj = ByteUtil.getObjectFromBytes(objBytes);

// 缓存对象
resultMap.put(CacheConstants.CACHE_MAP_KEY_VALUE, obj);

// 存放缓存数据时的timestamp
resultMap.put(CacheConstants.CACHE_MAP_KEY_TIMESTAMP, timestamp);

// 为确保finally中能正确释放client,此处需重获取一次
client = keyspace.getClient();

// 用户的缓存数据
return resultMap;
}
// Key或者Column不存在
catch (NotFoundException e)
{
sLog.error(e);
}
catch (Exception e)
{
sLog.error("根据Key和column从缓存读取数据(包括timestamp)时出错。");
sLog.error(e);
}
finally
{
// finally中释放client
releaseClient(pool, client);
}
return null;
}
025-07-03T15:46:22.723543009+08:00 stdout F 07:46:22.723 [main] ERROR org.apache.cassandra.io.util.FileUtils - FATAL: Cassandra is unable to access required classes. This usually means it has been run without the aid of the standard startup scripts or the scripts have been edited. If this was intentional, and you are attempting to use Java 11+ you may need to add the --add-exports and --add-opens jvm options from either jvm11-server.options or jvm11-client.options 2025-07-03T15:46:22.723543009+08:00 stdout F java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T15:46:22.723543009+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T15:46:22.723939593+08:00 stdout P Exception (java.lang.ExceptionInInitializerError) encountered during startup: null 2025-07-03T15:46:22.723979395+08:00 stdout F 2025-07-03T15:46:22.724179420+08:00 stderr P java.lang.ExceptionInInitializerError 2025-07-03T15:46:22.724190507+08:00 stderr F 2025-07-03T15:46:22.724269667+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T15:46:22.724321597+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T15:46:22.724342025+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T15:46:22.724364118+08:00 stderr F 2025-07-03T15:46:22.724449226+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T15:46:22.724462413+08:00 stderr F 2025-07-03T15:46:22.724507351+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T15:46:22.724533838+08:00 stderr P at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T15:46:22.724547333+08:00 stderr F 2025-07-03T15:46:22.724567912+08:00 stderr P at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T15:46:22.724577419+08:00 stderr F 2025-07-03T15:46:22.724596102+08:00 stderr P at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T15:46:22.724605534+08:00 stderr F 2025-07-03T15:46:22.724743010+08:00 stderr P Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.724759623+08:00 stderr F 2025-07-03T15:46:22.724796764+08:00 stderr P at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:110) 2025-07-03T15:46:22.724831605+08:00 stderr F 2025-07-03T15:46:22.724842297+08:00 stderr P ... 8 more 2025-07-03T15:46:22.724852948+08:00 stderr F 2025-07-03T15:46:22.724917495+08:00 stderr P Caused by: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.724928367+08:00 stderr F 2025-07-03T15:46:22.724962497+08:00 stderr P at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T15:46:22.724973277+08:00 stderr F 2025-07-03T15:46:22.724992712+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T15:46:22.725002117+08:00 stderr F 2025-07-03T15:46:22.725046030+08:00 stderr F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T15:46:22.725081741+08:00 stderr F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T15:46:22.725125434+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T15:46:22.725136176+08:00 stderr F 2025-07-03T15:46:22.725147506+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T15:46:22.725158852+08:00 stderr F 2025-07-03T15:46:22.725192482+08:00 stderr F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T15:46:22.725214073+08:00 stderr P ... 8 more 2025-07-03T15:46:22.725233470+08:00 stderr F 2025-07-03T15:46:22.725767279+08:00 stdout F 07:46:22.725 [main] ERROR org.apache.cassandra.service.CassandraDaemon - Exception encountered during startup 2025-07-03T15:46:22.725767279+08:00 stdout F java.lang.ExceptionInInitializerError: null 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T15:46:22.725767279+08:00 stdout F Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:110) 2025-07-03T15:46:22.725767279+08:00 stdout F ... 8 common frames omitted 2025-07-03T15:46:22.725767279+08:00 stdout F Caused by: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@7d898981/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T15:46:22.725767279+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T15:46:22.725767279+08:00 stdout F ... 8 common frames omitted这个是什么报错启动命令是podman run -d \ --name cassandra \ --network janusgraph-net \ --privileged \ -p 9042:9042 \ -v /opt/janusgraph/conf/cassandra:/etc/cassandra:z \ -v /home/iaas/janusgraph-full-0.6.3/cassandra/lib:/usr/share/cassandra/lib:z \ -e CASSANDRA_CONF=/etc/cassandra \ -e CLASSPATH=/usr/share/cassandra/lib/* \ -e CASSANDRA_AUTHENTICATOR=PasswordAuthenticator \ -e CASSANDRA_USER=cassandra \ -e CASSANDRA_CLUSTER_NAME=JanusGraphCluster \ -e JVM_EXTRA_OPTS="--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED" \ docker.io/library/cassandra:4.0这个jdk是11请问
最新发布
07-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值