亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

redis中使用java腳本實現分布式鎖

2020-10-28 21:41:56
字體:
來源:轉載
供稿:網友

redis被大量用在分布式的環境中,自然而然分布式環境下的鎖如何解決,立馬成為一個問題。例如我們當前的手游項目,服務器端是按業務模塊劃分服務器的,有應用服,戰斗服等,但是這兩個vm都有可能同時改變玩家的屬性,這如果在同一個vm下面,就很容易加鎖,但如果在分布式環境下就沒那么容易了,當然利用redis現有的功能也有解決辦法,比如redis的腳本。

redis在2.6以后的版本中增加了Lua腳本的功能,可以通過eval命令,直接在RedisServer環境中執行Lua腳本,并且可以在Lua腳本中調用Redis命令。
使用腳本的好處:

1.減少網絡開銷:可以把一些要批量處理的功能,發在一個腳本里面執行,減少客戶端和redis的交互次數
2.原子操作:這主要就是我們在這邊主要利用的功能,在分布式環境下保證數據的原子性。
3.復用:客戶端發送的腳本會永久的存儲在redis中,這就意味著其他客戶端可以復用這一腳本而不需要使用代碼完成同樣的邏輯。

下面先看一段lua腳本:

復制代碼 代碼如下:

local food=redis.call('hget',KEYS[1],'food');
food=food+ARGV[1];
redis.call('hset',KEYS[1],'food',food);
local diamond=redis.call('hget',KEYS[1],'diamond');
diamond=diamond+ARGV[2];
redis.call('hset',KEYS[1],'diamond',diamond);

注:redis.call是我們在腳本中調用redis命令,KEYS和ARGV2個數組,分別是鍵和參數,下標都是從1開始的,不是0。
這段腳本的功能是取出 KEYS指定的玩家food(糧草)和diamond(玉石),然后就行修改,最后保存在redis中,腳本的執行,保證了整個操作的原子性。

下面我們用java代碼來看看具體的實現過程

復制代碼 代碼如下:

Jedis jedis = new Jedis("192.168.128.128", 6379);
// 1.初始玩家數據到redis中
GamePlayer player = new GamePlayer();
player.setId(1001);
player.setName("ksfzhaohui");
player.setFood(100);
player.setDiamond(100);
 
Map<String, String> beanMap = BeanUtil.warp(player);// 將對象轉換成map
String beanKey = getRedisBeanKey(player.getClass(), player.getId());
System.out.println("key:" + beanKey);
jedis.hmset(beanKey, beanMap);// 將玩家數據保存到redis中

首先模擬了一個玩家將玩家信息保存在redis中,這邊的Id隨便寫了一個,正常的情況下都是通過redis的命令incr生成一個id
結果:

復制代碼 代碼如下:

String script = "local food=redis.call('hget',KEYS[1],'food');"
                + "food=food+ARGV[1];"
                + "redis.call('hset',KEYS[1],'food',food);"
                + "local diamond=redis.call('hget',KEYS[1],'diamond');"
                + "diamond=diamond+ARGV[2];"
                + "redis.call('hset',KEYS[1],'diamond',diamond);";
List<String> keys = new ArrayList<String>();
keys.add(beanKey);
List<String> args = new ArrayList<String>();
args.add("100");
args.add("100");
// 3.執行腳本
jedis.eval(script, keys, args);

指定鍵和參考,執行腳本,結果:

BeanUtil代碼:

復制代碼 代碼如下:

public class BeanUtil {
    private static Logger logger = Logger.getLogger(BeanUtil.class);
    private static final String CLASS = "class";
 
    /**
     * 將指定的對象數據封裝成map
     *
     * @param bean
     *            對象數據
     * @return
     */
    @SuppressWarnings("all")
    public static Map<String, String> warp(Object bean) {
        Map<String, String> propertyMap = new HashMap<String, String>();
        try {
            PropertyDescriptor[] ps = Introspector.getBeanInfo(bean.getClass())
                    .getPropertyDescriptors();
            for (PropertyDescriptor propertyDescriptor : ps) {
                String propertyName = propertyDescriptor.getName();
                if (propertyName != null && !propertyName.equals(CLASS)) {
                    Method getter = propertyDescriptor.getReadMethod();
                    if (getter != null) {
                        propertyMap.put(propertyName,
                                String.valueOf(getter.invoke(bean, null)));
                    }
                }
            }
        } catch (Exception e) {
            logger.error(e);
        }
        return propertyMap;
    }
 
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产专区欧美专区| 国产精品精品视频一区二区三区| 欧美性猛交xxxx乱大交| 亚洲最大成人在线| 亚洲综合在线中文字幕| 91精品久久久久久| 26uuu另类亚洲欧美日本老年| 国产精品7m视频| 精品国产美女在线| 日韩高清不卡av| 日韩美女在线观看一区| 国产精品免费看久久久香蕉| 最近日韩中文字幕中文| 91亚洲国产精品| 欧美日韩国产一区二区| 欧美亚洲第一页| www.日韩系列| 欧美成年人视频| 午夜精品福利视频| 国产精品极品尤物在线观看| 精品视频一区在线视频| 亚洲欧美另类中文字幕| 欧美在线性爱视频| 欧美在线不卡区| 91国产视频在线| 中文字幕国内精品| 欧美日韩在线一区| 亚洲精品影视在线观看| 亚洲女人天堂视频| 91精品美女在线| 91免费版网站入口| 久久国产精品网站| 欧美日韩激情视频8区| 国产精品一区二区久久国产| 国产一区二区欧美日韩| 亚洲成人激情在线观看| 欧美激情xxxx性bbbb| 久久综合伊人77777| 国产精品大陆在线观看| 色哟哟亚洲精品一区二区| 中文字幕九色91在线| 欧美黑人又粗大| 国产欧美在线观看| 日韩av在线天堂网| 精品中文字幕在线观看| 国产a∨精品一区二区三区不卡| 伊人亚洲福利一区二区三区| 国产一区二区三区18| 久久久久久久久久久国产| 久久成人av网站| 亚洲欧洲一区二区三区久久| 国产亚洲精品久久久久动| 亚洲欧美制服另类日韩| 国产精品自拍网| 日韩在线视频观看| 中文字幕自拍vr一区二区三区| 国产精品旅馆在线| 国产午夜精品久久久| 亚洲成年人在线| 在线看片第一页欧美| 欧美日韩视频免费播放| 欧美精品激情blacked18| 日本久久中文字幕| 国产精品96久久久久久又黄又硬| 欧美一级电影免费在线观看| 日韩国产一区三区| 亚洲天堂精品在线| 秋霞成人午夜鲁丝一区二区三区| 亚洲欧美变态国产另类| 欧美激情久久久久| 亚洲四色影视在线观看| 亚洲国产免费av| 精品无码久久久久久国产| 久久伊人精品一区二区三区| 555www成人网| 在线午夜精品自拍| 久久久成人的性感天堂| 最近2019中文免费高清视频观看www99| 国产欧美日韩亚洲精品| 91精品国产综合久久久久久蜜臀| 国产亚洲精品久久| 色妞在线综合亚洲欧美| 欧美老少做受xxxx高潮| 亚洲精品第一国产综合精品| 国产精品久久久久久久久久尿| 8050国产精品久久久久久| 亚洲电影天堂av| 在线亚洲国产精品网| 亚洲免费电影在线观看| 68精品久久久久久欧美| 狠狠躁夜夜躁人人躁婷婷91| 久久亚洲影音av资源网| 午夜免费在线观看精品视频| 日本午夜精品理论片a级appf发布| 欧美激情一区二区三区在线视频观看| 日韩欧美亚洲国产一区| 午夜精品一区二区三区在线视| 亚洲国产精品久久久久秋霞蜜臀| 成人黄色大片在线免费观看| 一区二区三区国产在线观看| 亚洲va欧美va国产综合剧情| 国产日产亚洲精品| 日韩高清中文字幕| 91久久久久久久一区二区| 国产免费久久av| 国产成人91久久精品| 自拍亚洲一区欧美另类| 亚洲少妇中文在线| 亚洲国产成人精品久久久国产成人一区| 亚洲人午夜色婷婷| 秋霞成人午夜鲁丝一区二区三区| 91精品在线一区| 日韩美女在线观看| 久久九九国产精品怡红院| 色综合久久悠悠| 亚洲xxxx3d| 日本精品久久久| 精品亚洲国产视频| 亚洲国产成人精品一区二区| 久久久亚洲国产天美传媒修理工| 色综合久综合久久综合久鬼88| 亚洲美女中文字幕| 精品久久香蕉国产线看观看亚洲| 狠狠操狠狠色综合网| 国产在线不卡精品| 欧美精品videos| 精品亚洲一区二区三区四区五区| 成人午夜激情免费视频| 亚洲一区二区久久久久久久| 日韩中文字幕第一页| 国产日韩在线一区| 色七七影院综合| 亚洲人成网站免费播放| 亚洲一区二区三| 国产在线观看精品一区二区三区| 91视频国产一区| 亚洲女人初尝黑人巨大| 日韩视频免费看| 精品一区二区三区四区在线| 日本一本a高清免费不卡| 黄色精品一区二区| 欧美亚洲伦理www| 法国裸体一区二区| 国产在线观看精品| 精品福利在线观看| 91精品免费久久久久久久久| 国产91网红主播在线观看| 日韩精品欧美国产精品忘忧草| 色综合久综合久久综合久鬼88| 精品日韩中文字幕| 精品亚洲国产视频| 国产精品男女猛烈高潮激情| 亚州国产精品久久久| 欧美乱妇40p| 欧美午夜影院在线视频| 久久久999精品免费| 国产美女主播一区| 久久夜色精品亚洲噜噜国产mv| 中文字幕日韩欧美精品在线观看| 亚洲男人天天操| 亚洲第一中文字幕在线观看| 亚洲精品电影在线观看| 久久精品久久久久久国产 免费| 中文字幕日韩在线播放|