org.crazycake.shiro.LettuceRedisManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of shiro-redis Show documentation
Show all versions of shiro-redis Show documentation
shiro only provide the support of ehcache and
concurrentHashMap. Here is an implement of redis cache can be used by
shiro. Hope it will help you!
The newest version!
package org.crazycake.shiro;
import io.lettuce.core.RedisClient;
import io.lettuce.core.RedisURI;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.codec.ByteArrayCodec;
import io.lettuce.core.support.ConnectionPoolSupport;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.crazycake.shiro.common.AbstractLettuceRedisManager;
import org.crazycake.shiro.exception.PoolException;
/**
* Singleton lettuce redis
*
* @author Teamo
* @since 2022/05/18
*/
public class LettuceRedisManager extends AbstractLettuceRedisManager {
/**
* Redis server host.
*/
private String host = "localhost";
/**
* Redis server port.
*/
private int port = RedisURI.DEFAULT_REDIS_PORT;
/**
* GenericObjectPool.
*/
private volatile GenericObjectPool> genericObjectPool;
@SuppressWarnings({"unchecked", "rawtypes"})
private void initialize() {
if (genericObjectPool == null) {
synchronized (LettuceRedisManager.class) {
if (genericObjectPool == null) {
RedisClient redisClient = RedisClient.create(createRedisURI());
redisClient.setOptions(getClientOptions());
GenericObjectPoolConfig genericObjectPoolConfig = getGenericObjectPoolConfig();
genericObjectPool = ConnectionPoolSupport.createGenericObjectPool(() -> redisClient.connect(new ByteArrayCodec()), genericObjectPoolConfig);
}
}
}
}
private RedisURI createRedisURI() {
RedisURI.Builder builder = RedisURI.builder()
.withHost(getHost())
.withPort(getPort())
.withDatabase(getDatabase())
.withTimeout(getTimeout());
String password = getPassword();
if (password != null) {
builder.withPassword(password.toCharArray());
}
return builder.build();
}
@Override
protected StatefulRedisConnection getStatefulConnection() {
if (genericObjectPool == null) {
initialize();
}
try {
return genericObjectPool.borrowObject();
} catch (Exception e) {
throw new PoolException("Could not get a resource from the pool", e);
}
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy