AsyncCqlTemplate 带插入的缓存准备语句
AsyncCqlTemplate Cached Prepared Statement with Insert
我正在使用 spring-data-cassandra 2.0。7.RELEASE 我很难弄清楚如何获得 cached
准备好的语句。
以类似的方式,我使用了 CqlTemplate 模板并创建了一个 PreparedStatementCache
,并且能够像这样创建一个缓存的准备好的语句:
PreparedStatementCreator preparedStatementCreator = ...;
PreparedStatementBinder binder = ...;
return selectCqlTemplate.query(preparedStatementCreator,
binder,
resultSetExtractor);
对于 AsyncCqlTemplate,我看到有一个 AsyncPreparedStatementCreator
但不太清楚如何创建其中一个,因为唯一的实现是 SimpleAsyncPreparedStatementCreator
,它是私有的。
所以我的问题是,对于插入语句,使用 AsyncCqlTemplate 和缓存准备好的语句的最佳方法是什么?
Spring Apache Cassandra 数据不提供内置异步 PreparedStatement
缓存。它只附带一个同步的 (CachedPreparedStatementCreator
, PreparedStatementCache
)。
实施异步缓存需要在同步方面做出一些努力,并避免重复准备调用。
一个简单的实现可能如下所示:
public class AsyncCachedPreparedStatementCreator implements AsyncPreparedStatementCreator, CqlProvider {
private final String cql;
private final Map<Session, com.google.common.util.concurrent.ListenableFuture<PreparedStatement>> cache = new ConcurrentHashMap<>();
public AsyncCachedPreparedStatementCreator(String cql) {
this.cql = cql;
}
@Override
public ListenableFuture<PreparedStatement> createPreparedStatement(Session session) throws DriverException {
com.google.common.util.concurrent.ListenableFuture<PreparedStatement> future = cache.computeIfAbsent(session,
s -> s.prepareAsync(cql));
return new GuavaListenableFutureAdapter<>(future, new CassandraExceptionTranslator());
}
@Override
public String getCql() {
return cql;
}
}
此实现采用每个 Session
缓存并将其缓存保存在 ConcurrentHashMap
.
中
我正在使用 spring-data-cassandra 2.0。7.RELEASE 我很难弄清楚如何获得 cached
准备好的语句。
以类似的方式,我使用了 CqlTemplate 模板并创建了一个 PreparedStatementCache
,并且能够像这样创建一个缓存的准备好的语句:
PreparedStatementCreator preparedStatementCreator = ...;
PreparedStatementBinder binder = ...;
return selectCqlTemplate.query(preparedStatementCreator,
binder,
resultSetExtractor);
对于 AsyncCqlTemplate,我看到有一个 AsyncPreparedStatementCreator
但不太清楚如何创建其中一个,因为唯一的实现是 SimpleAsyncPreparedStatementCreator
,它是私有的。
所以我的问题是,对于插入语句,使用 AsyncCqlTemplate 和缓存准备好的语句的最佳方法是什么?
Spring Apache Cassandra 数据不提供内置异步 PreparedStatement
缓存。它只附带一个同步的 (CachedPreparedStatementCreator
, PreparedStatementCache
)。
实施异步缓存需要在同步方面做出一些努力,并避免重复准备调用。
一个简单的实现可能如下所示:
public class AsyncCachedPreparedStatementCreator implements AsyncPreparedStatementCreator, CqlProvider {
private final String cql;
private final Map<Session, com.google.common.util.concurrent.ListenableFuture<PreparedStatement>> cache = new ConcurrentHashMap<>();
public AsyncCachedPreparedStatementCreator(String cql) {
this.cql = cql;
}
@Override
public ListenableFuture<PreparedStatement> createPreparedStatement(Session session) throws DriverException {
com.google.common.util.concurrent.ListenableFuture<PreparedStatement> future = cache.computeIfAbsent(session,
s -> s.prepareAsync(cql));
return new GuavaListenableFutureAdapter<>(future, new CassandraExceptionTranslator());
}
@Override
public String getCql() {
return cql;
}
}
此实现采用每个 Session
缓存并将其缓存保存在 ConcurrentHashMap
.