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 RedisTemplateredisTemplate; /** * 连接到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脚本,参数列表将作为脚本的参数。