spring cloud redis 集群 事務

2021-09-30 20:25:11 字數 3408 閱讀 4602

redis集群若想實現多key的事務控制,可能根據分片演算法會分配到不同的jedisclient,導致無法進行事務控制,這應該就是redis集群不支援事務的核心原因。但是若是單個key的get()獲取值之後再set(),可以使用單個jedis連線的watch、multi()、exec()來實現,防止get()之後其它client又set()導致資料和預期不一致的場景。

redis實現事務方式三種:

1: 跟spring結合事務,只單台redis支援,redis集群就無法滿足。

3:自定義實現方式,可以通過佇列實現,手動提交,手動回滾。

基於spring cloud 專案使用redis本身事務配置如下:

首先獲取redis集群配置的伺服器與埠:

@configuration

@configurationproperties(prefix = "spring.redis.cluster")

public class redisclusterproperties

public void setnodes(listnodes)

}jediscluster配置

/*** jediscluster配置

* @classname: jedisclusterconfig 

* @date: 2019-1-28   

*/@configuration

public class jedisclusterconfig

string serverarray = redisclusterproperties.getnodes().get(0).split(",");

setnodes = new hashset<>();

for (string node:serverarray)

return new jediscluster(nodes);}}

呼叫的工具類:

private static threadlocaltxthreadlocal = new threadlocal<>();

private static threadlocalclusterthreadlocal= new threadlocal<>();

/*** @title: multi

* @description: 開啟事務使用redis事務必須呼叫此方法

*/public static void multi()

/*** 儲存string資料型別,如果存的是物件,則格式化為json格式

* @param key

* @param value

*/public static void set(string key,string value)

/*** 批量儲存string資料型別

* @param key

* @param value

*/public static void mset(string... keysvalues)

/*** 批量儲存hash資料型別

* @param key

* @param value

*/public static void hmset(string key,maphash)

/*** 儲存list資料型別

* @param key

* @param value

*/public static void lpush(string key,string... values)

/*** 儲存set資料型別

* @param key

* @param value

*/public static void sadd(string key,string... member)

/*** 儲存sorted set資料型別

* @param key

* @param value

*/public static void zadd(string key,mapscoremembers)

/*** 通用刪除

* @param key

* @param value

*/public static void del(string... keys) }}

/*** 刪除hash

* @param key

* @param value

*/public static void hdel(string key,string... field)

/*** 刪除set

* @param key

* @param value

*/public static void srem(string key,string... member)

/*** 刪除sorted set

* @param key

* @param value

*/public static void zrem(string key,string... member)

/*** 提交

*/public static void exec() }}

/*** 回滾

*/public static void discard() }}

/*** 根據key,得到事務物件

* @param cluster 

* @param key

* @return

*/private static transaction settxbykey(string key)

mapmap = cluster.getclusternodes();

for(entryentry:map.entryset()) catch (exception e)

}return null;

}/**

* 根據key,獲取資料

* @param key

* @return

*/public static t getbykey(string key,classcls)

} catch (exception e)

if (null != obj)

}return json.parseobject(json.tojsonstring(obj), cls);

}/**

* 刪除方法

* @param key

*/private static void delbykey(string key) catch (exception e) }}

/*** 

* @return

*/public static jedispoolconfig getjedispoolconfig()

public static void  delallclusterkey(string keypattern) catch (exception e)

}if (!keys.isempty()) }}

Spring Cloud Redis 介面冪等性

冪等性原本是數學上的概念,即使公式 f x f f x 能夠成立的數學性質。用在程式設計領域,則意為對同乙個系統,使用同樣的條件,一次請求和重複的多次請求對系統資源的影響是一致的。介面的增刪改查操作 1.查詢是天然的冪等操作 2.刪除一次和多次刪除都是把資料刪除。返回結果可能不一樣,刪除的資料不存在...

MySQL cluster集群 NDB集群學習

公司主業務用的mysql集群是官方自帶的mysql cluster,mysql自帶的集群模式,這個集群的模式和mgr pxc 主從 有點不一樣。一 儲存引擎不是innodb,mysql cluster用的是ndb引擎 二 資料儲存方式不同,mysql的其他集群方式資料是存在磁碟上的,中間資料的快取用...

zookeeper集群部署 kafka集群部署

wget wget 解壓到目錄 tar zxvf apache zookeeper 3.5.8 bin.tar.gz c usr local 進入目錄 cd usr local 建立軟連線 ln s usr local apache zookeeper 3.5.8 zookeeper 複製配置檔案 ...