Redis工具类
发布人:shili8
发布时间:2025-01-02 07:15
阅读次数:0
**Redis工具类**
================本文将介绍一个完整的Redis工具类,涵盖了常见的Redis操作,如连接、断开、设置值、获取值、删除值等。同时,还提供了一些高级功能,如事务处理、管道传输和Lua脚本执行。
**工具类概述**
---------------该工具类名为`RedisUtil.java`,它使用了Spring Boot的RedisTemplate来进行操作。工具类中包含以下方法:
* `connect()`:连接到Redis服务器* `disconnect()`:断开与Redis服务器的连接* `set(String key, String value)`:设置指定键值对* `get(String key)`:获取指定键的值* `delete(String... keys)`:删除指定键或多个键* `executeTransaction(RedisCallback callback)`:执行事务操作* `pipeline()`:开启管道传输* `eval(String script, String... args)`:执行Lua脚本**工具类代码**
-----------------
javaimport org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Redis工具类 */
@Componentpublic class RedisUtil {
private static final String REDIS_TEMPLATE_BEAN_NAME = "redisTemplate";
@Autowired private RedisTemplate redisTemplate;
/**
* 连接到Redis服务器 *
* @return true表示连接成功,false表示连接失败 */
public boolean connect() {
return redisTemplate != null;
}
/**
* 断开与Redis服务器的连接 */
public void disconnect() {
// RedisTemplate会自动断开连接,不需要手动断开 }
/**
* 设置指定键值对 *
* @param key 键 * @param value 值 */
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* 获取指定键的值 *
* @param key 键 * @return 指定键对应的值,null表示不存在 */
public String get(String key) {
return (String) redisTemplate.opsForValue().get(key);
}
/**
* 删除指定键或多个键 *
* @param keys 键列表 */
public void delete(String... keys) {
for (String key : keys) {
redisTemplate.delete(key);
}
}
/**
* 执行事务操作 *
* @param callback 事务回调函数 * @return 回调函数的返回值 */
public Object executeTransaction(RedisCallback callback) {
return redisTemplate.execute(callback);
}
/**
* 开启管道传输 *
* @return RedisPipedExecution对象 */
public RedisPipedExecution pipeline() {
return redisTemplate.pipelined();
}
/**
* 执行Lua脚本 *
* @param script 脚本内容 * @param args 参数列表 * @return 脚本执行结果 */
public Object eval(String script, String... args) {
return redisTemplate.execute((RedisCallback) connection -> {
Script scriptObject = connection.getNativeConnection().getScriptingSupport().compile(script);
return scriptObject.execute(connection.getNativeConnection(), args);
});
}
}
**使用示例**
-------------
java@RestControllerpublic class RedisController {
@Autowired private RedisUtil redisUtil;
@GetMapping("/set")
public String set() {
redisUtil.set("key", "value");
return "设置成功";
}
@GetMapping("/get")
public String get() {
String value = redisUtil.get("key");
return value != null ? value : "不存在";
}
@GetMapping("/delete")
public String delete() {
redisUtil.delete("key");
return "删除成功";
}
@GetMapping("/transaction")
public String transaction() {
RedisCallback callback = connection -> {
connection.set("key1", "value1");
connection.set("key2", "value2");
return null;
};
redisUtil.executeTransaction(callback);
return "事务执行成功";
}
@GetMapping("/pipeline")
public String pipeline() {
RedisPipedExecution execution = redisUtil.pipeline();
execution.set("key1", "value1");
execution.set("key2", "value2");
execution.sync();
return "管道传输成功";
}
@GetMapping("/eval")
public String eval() {
String script = "return {KEYS[1], KEYS[2]};";
Object result = redisUtil.eval(script, "key1", "key2");
return result != null ? result.toString() : "不存在";
}
}
**注意事项**
-------------
* RedisTemplate会自动断开连接,不需要手动断开。
* 使用RedisTemplate时,需要注入一个RedisTemplate实例。
* executeTransaction方法执行事务操作,回调函数的返回值将作为结果返回。
* pipeline方法开启管道传输,sync方法用于同步执行。
* eval方法执行Lua脚本,参数列表将作为脚本的参数。

