Java语言实现redis实现session共享代码案例
时间: 2024-05-08 20:18:12 浏览: 15
Sure, I can help you with that. Here is an example code for implementing Redis to share sessions in Java:
```
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
public class RedisSessionManager {
private static final String REDIS_HOST = "localhost";
private static final int REDIS_PORT = 6379;
private static final int MAX_IDLE = 10;
private static final int MAX_TOTAL = 30;
private static final int MAX_WAIT_MILLIS = 10000;
private static final int TIMEOUT = 1000;
private static final String SESSION_PREFIX = "session:";
private static final Map<String, HttpSession> sessions = new HashMap<>();
private static JedisPool jedisPool = null;
static {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(MAX_IDLE);
poolConfig.setMaxTotal(MAX_TOTAL);
poolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);
jedisPool = new JedisPool(poolConfig, REDIS_HOST, REDIS_PORT, TIMEOUT);
}
public static HttpSession createSession() {
Jedis jedis = jedisPool.getResource();
String sessionId = SESSION_PREFIX + UUID.randomUUID().toString();
HttpSession session = new RedisHttpSession(sessionId, jedis);
sessions.put(sessionId, session);
return session;
}
public static HttpSession getSession(String sessionId) {
HttpSession session = sessions.get(sessionId);
if (session == null) {
Jedis jedis = jedisPool.getResource();
session = new RedisHttpSession(sessionId, jedis);
sessions.put(sessionId, session);
}
return session;
}
public static void removeSession(String sessionId) {
sessions.remove(sessionId);
Jedis jedis = jedisPool.getResource();
jedis.del(sessionId);
jedis.close();
}
}
```
This code uses the Jedis library to connect to Redis and store session data. It provides methods for creating, getting and removing sessions. The sessions are stored in a HashMap in memory for fast access, but are also persisted to Redis so they can be shared across multiple servers.
I hope this helps!