redis與lua腳本結合,java基本使用

Lua介紹java

        Lua是一個高效、簡潔、輕量級、可擴展的腳本語言,能夠很方便的嵌入到其它語言中使git

用,Redis從2.6版支持Lua。redis

使用lua腳本的主要幾個好處spring

1:減小網絡開銷,這個能夠極大的提高訪問速度數據庫

2:原子操做:Redis會把腳本看成一個總體來執行,中間不會插入其它命令apache

3:複用功能緩存

4.能夠實現咱們傳統數據庫裏面的‘’存儲過程‘’服務器

下面是基本的示例:網絡

package org.lanqiao.ssm.common.redis.lua;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import redis.clients.jedis.Jedis;

/**
 * 
 * @Title: RedisTest.java
 * @Package org.lanqiao.ssm.common.redis
 * @Description: TODO(本地jedis 調用lua腳本使用)
 * @author 劉偉 15818570028@163.com
 * @date 2016年10月11日 上午9:29:35
 * @version V1.0
 */
public class RedisLuaTest {
	private static final Log log = LogFactory.getLog(RedisLuaTest.class);

	public static void main(String[] args) {

		Jedis jedis = new Jedis("10.1.10.80", 6379);
		List<String> keys = new ArrayList<>();
		List<String> vals = new ArrayList<>();

		// 測試一 基本測試
		Object eval = jedis.eval("return 1", keys, vals);
		log.info(eval);

		// 測試二 eval  裏面也能夠是一個文件
		keys.add("kk");
		Object eval2 = jedis.eval("local tab={}  for i=1,#KEYS do  tab[i] = redis.call('get',KEYS[i]) end return tab",
				keys, vals);
		log.info(eval2);

		// 測試三 scriptLoad 
		//好處:這樣能夠緩存到服務器,不用每次把lua腳本的內容傳過去
		String lua = "local tab={}  for i=1,#KEYS do  tab[i] = redis.call('get',KEYS[i]) end return tab";
		String scriptLoad = jedis.scriptLoad(lua);
		log.info(scriptLoad);
		Object evalsha = jedis.evalsha(scriptLoad, keys, vals);
		log.info(evalsha);

	}
}

打印輸出以下:測試

 

相應的代碼請點擊:

代碼裏有集成客戶端分片redis集羣和服務端redis集羣的實現,並有和spring的相關集成

https://git.oschina.net/liuweixy52222/ssm-common-redis.git

相關文章
相關標籤/搜索