redis集群事务管理工具类
来源:互联网 发布:淘宝美工好找工作吗 编辑:程序博客网 时间:2024/06/07 23:36
redis集群对象JedisCluster不支持事务,但是,集群里边的每个节点支持事务。
redis 集群管理事务的工具类
public class JedisClusterTransactionManager { private static ThreadLocal<Object> txThreadLocal = new ThreadLocal<>(); private static ThreadLocal<JedisCluster> clusterThreadLocal= new ThreadLocal<>(); //开启事务 public static void multi(JedisCluster jedisCluster){ clusterThreadLocal.set(jedisCluster); } /** * 保存string数据类型 * @param key * @param value */ public static void set(String key,String value) { Transaction tx = getTxByKey(key); tx.set(key, value); } /** * 批量保存string数据类型 * @param key * @param value */ public static void mset(String... keysvalues) { if(keysvalues!=null && keysvalues.length>0) { for(int i=0;i<keysvalues.length;i+=2) { String key = keysvalues[i]; String value = keysvalues[i+1]; Transaction tx = getTxByKey(key); tx.set(key, value); } } } /** * 保存hash数据类型 * @param key * @param value */ public static void hset(String key, String field,String value) { Transaction tx = getTxByKey(key); tx.hset(key, field, value); } /** * 批量保存hash数据类型 * @param key * @param value */ public static void hmset(String key,Map<String,String> hash) { Transaction tx = getTxByKey(key); tx.hmset(key, hash); } /** * 保存list数据类型 * @param key * @param value */ public static void lpush(String key,String... values) { Transaction tx = getTxByKey(key); tx.lpush(key, values); } /** * 保存set数据类型 * @param key * @param value */ public static void sadd(String key,String... member) { Transaction tx = getTxByKey(key); tx.sadd(key, member); } /** * 保存sorted set数据类型 * @param key * @param value */ public static void zadd(String key,Map<String,Double> scoreMembers) { Transaction tx = getTxByKey(key); tx.zadd(key, scoreMembers); } /** * 通用删除 * @param key * @param value */ public static void del(String... keys) { if(keys!=null && keys.length>0) { for(String key:keys) { Transaction tx = getTxByKey(key); tx.del(key); } } } /** * 删除hash * @param key * @param value */ public static void hdel(String key,String... field) { Transaction tx = getTxByKey(key); tx.hdel(key, field); } /** * 删除set * @param key * @param value */ public static void srem(String key,String... member) { Transaction tx = getTxByKey(key); tx.srem(key, member); } /** * 删除sorted set * @param key * @param value */ public static void zrem(String key,String... member) { Transaction tx = getTxByKey(key); tx.zrem(key, member); } /** * 提交 */ public static void exec() { Map<String,Transaction> map = (Map<String,Transaction> )txThreadLocal.get(); for(Entry<String,Transaction> entry:map.entrySet()) { entry.getValue().exec(); } } /** * 回滚 */ public static void discard() { Map<String,Transaction> map = (Map<String,Transaction> )txThreadLocal.get(); for(Entry<String,Transaction> entry:map.entrySet()) { entry.getValue().discard(); } } /** * 根据key,得到事务对象 * @param cluster * @param key * @return */ private static Transaction getTxByKey(String key) { JedisCluster cluster = clusterThreadLocal.get(); Map<String, Transaction> res = (Map<String, Transaction>)txThreadLocal.get(); if(res==null) { res = new HashMap<>(); } Map<String, JedisPool> map = cluster.getClusterNodes(); for(Entry<String,JedisPool> entry:map.entrySet()) { String keyEntry = entry.getKey(); String strArray[] = keyEntry.split(":"); String host = strArray[0]; Integer port = Integer.parseInt(strArray[1]); Jedis jedis = new Jedis(host, port); try { jedis.exists(key); Transaction tx = jedis.multi(); res.put(key, tx); txThreadLocal.set(res); return tx; } catch (Exception e) { jedis.close(); } } return null; }}
阅读全文
0 0
- redis集群事务管理工具类
- Java事务管理工具类
- Redis企业集群工具RLEC
- Redis企业集群工具RLEC
- Redis单机、集群环境下配置及模板工具类
- redis事务管理
- redis事务管理
- Redis集群监控工具之RedisLive
- scala对redis集群操作工具类 附带java版本的工具类以及spring配置
- java操作redis集群配置[可配置密码]和工具类
- redis进阶2-事务管理
- redis之事务管理
- Redis工具类获取Redis
- redis 集群
- redis集群
- Redis集群
- Redis 集群
- redis集群
- maven_如何导包
- 【python】线程池ThreaPool-多线程mysql爆破+源码分析
- 二十五、匿名函数
- C语言历史
- 史上最完美最简单实用的解决文本溢出方法(tooltip/popover)
- redis集群事务管理工具类
- linux系统下opencv-3.3.1安装配置
- java线程池
- 谈谈nodejs爬虫程序利器——cheerio模块
- FFmpeg Filtergraphs -examples
- Adobe Animate CC 2018 for Mac (an cc2018中文破解版)附破解补丁 v18.0.1中文破解版
- 2017年度最流行的十大中国开源软件
- Gson解析JSON数据中动态未知字段key的方法
- 教你如何通过MCU将S2E配置为UDP的工作模式