您的位置:首页 > 数据库 > Redis

redis与lua脚本结合,java基本使用

2017-03-04 00:00 615 查看
Lua介绍

Lua是一个高效、简洁、轻量级、可扩展的脚本语言,可以很方便的嵌入到其它语言中使

用,Redis从2.6版支持Lua。

使用lua脚本的主要几个好处

1:减少网络开销,这个可以极大的提升访问速度

2:原子操作:Redis会把脚本当作一个整体来执行,中间不会插入其它命令

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: