我想通过重用连接对象来提高 Redis 读/写的性能。因此,我在类中将其设置为static,并且我的 get() 和 set() 函数正在使用此静态连接。
在多线程环境中,这会导致数据损坏吗?因为连接是静态的,所以两个线程可以同时访问它,并且一个线程的数据可以发送到另一个线程吗?
我在 Java 中使用 Lettuce lib。
class RedisServiceLocator {
static StatefulRedisConnection<String, String> redisConn = null;
// constructor
public RedisServiceLocator() {
// create client and get connection if null
if(RedisServiceLocator.redisConn == null) {
RedisClient redisClient = RedisClient.create(redisURL);
RedisServiceLocator.redisConn = redisClient.connect()
}
}
// set
public void set(String key, String val){
RedisServiceLocator.redisConn.sync().set(key, val);
}
// get
public String get(String key){
redisConn.sync().get(key);
}
}
最好的方法是使用消息系统。创建一个单例类,例如
public class RedisMessenger {
private Queue<Message> messages;
public long queueMessage(Message m); //return a response ticket number
public void registerListener(RedisResponseListener l, RedisMessageType t);
}
然后使用线程发送查询并通知适当的侦听器。
您可以使用 RedisMessageType 参数来允许监听特定消息(通过消息票号)或按消息类别的响应。