下面是一个Java示例,说明如何在Redis和Redisson中使用直读缓存。

如果请求的条目在缓存中不存在,则它将由MapLoader对象加载:

MapLoader<String, String> mapLoader = new MapLoader<String, String>()
{
@Override
public Iterable loadAllKeys()
{
List list = new ArrayList();
Statement statement = conn.createStatement();
try {
ResultSet result = statement.executeQuery( “SELECT id FROM student” );
while ( result.next() )
{
list.add( result.getString( 1 ) );
}
} finally {
statement.close();
}
return(list);
}
@Override
public String load( String key )
{
PreparedStatement preparedStatement = conn.prepareStatement( “SELECT name FROM student where id = ?” );
try {
preparedStatement.setString( 1, key );
ResultSet result = preparedStatement.executeQuery();
if ( result.next() )
{
return(result.getString( 1 ) );
}
return(null);
} finally {
preparedStatement.close();
}
}
}
配置使用案例:
MapOptions<K, V> options = MapOptions.< K, V > defaults()
.loader( mapLoader );
RMap<K, V> map = redisson.getMap( “test”, options );
/* or */
RMapCache<K, V> map = redisson.getMapCache( “test”, options );
/* or with boost up to 45x times */
RLocalCachedMap<K, V> map = redisson.getLocalCachedMap( “test”, options );
/* or with boost up to 45x times */
RLocalCachedMapCache<K, V> map = redisson.getLocalCachedMapCache( “test”, options );
Redis中的直写缓存

下面是一个Java示例,说明如何在Redis中使用Redis中的Redis使用直写缓存。

在MapWriter对象更新缓存和数据库之前,缓存更新方法不会返回:

MapWriter<String, String> mapWriter = new MapWriter<String, String>()
{
@Override
public void writeAll( Map<String, String> map )
{
PreparedStatement preparedStatement = conn.prepareStatement( “INSERT INTO student (id, name) values (?, ?)” );
try {
for ( Entry<String, String> entry : map.entrySet() )
{
preparedStatement.setString( 1, entry.getKey() );
preparedStatement.setString( 2, entry.getValue() );
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
} finally {
preparedStatement.close();
}
}
@Override
public void write( String key, String value )
{
PreparedStatement preparedStatement = conn.prepareStatement( “INSERT INTO student (id, name) values (?, ?)” );
try {
preparedStatement.setString( 1, key );
preparedStatement.setString( 2, value );
preparedStatement.executeUpdate();
} finally {
preparedStatement.close();
}
}
@Override
public void deleteAll( Collection keys )
{
PreparedStatement preparedStatement = conn.prepareStatement( “DELETE FROM student where id = ?” );
try {
for ( String key : keys )
{
preparedStatement.setString( 1, key );
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
} finally {
preparedStatement.close();
}
}
@Override
public void delete( String key )
{
PreparedStatement preparedStatement = conn.prepareStatement( “DELETE FROM student where id = ?” );
try {
preparedStatement.setString( 1, key );
preparedStatement.executeUpdate();