/**
* 空间索引申请方法(value存储为Byte类型)
* 索引结构:
* 块开始索引,4字节,最大1.9G :2147483647/1024/1024/1024=1.9G (没有用块编号乘2048作开始索引,然后用两个字节存块编号,是因为两字节太小)
* 索引偏移量4字节,最大1.9G :2147483647/1024/1024/1024=1.9G
* 块生成时间与更新时间每个占4字节共8字节
*
*
* @return
*/
public static String getSpaceIndexByteLuaScript() {
String luaStr = "local bigkey = KEYS[1];"
//数据长度
+ "local dataLen = tonumber(ARGV[1]);"
//vid
+ "local smallKey = ARGV[2];"
//临时编号
+ "local serNum = tonumber(ARGV[3]);"
//数据块长度
+ "local blockLen = tonumber(ARGV[4]);"
//终端时间
+ "local devTime = tonumber(ARGV[5]);"
//写入或更新标识,0写入,1更新
+ "local inUp = tonumber(ARGV[6]);"
//该条数据该天打点状态
+ "local dayDotState = tonumber(ARGV[7]);"
//日期行数据打点状态数据打点状态小Key
+ "local dayDotKey = ARGV[8];"
//报警行数据打点状态
+ "local alarmTypeState = tonumber(ARGV[9]);"
//报警行数据打点状态数据打点状态小Key
+ "local alarmDotKey = ARGV[10];"
//索引集合,字节:开始索引(4)+偏移索引(4)+块开始时间(4)+块开始更新(4);如果有多块,则重复前述
+ "local asciiIndex = redis.call('HGET',bigkey,smallKey);"
//文件长度
+ "local oldfileLen = redis.call('HGET',bigkey,\"fileLen\");"
//旧日期打点状态
+ "local oldDayDotState = redis.call('HGET',bigkey,dayDotKey);"
//旧报警打点状态
+ "local oldAlarmTypeState = redis.call('HGET',bigkey,alarmDotKey);"
+ "local fileLen = 0;"
+ "if(oldfileLen ~= false) then "
+ " fileLen = tonumber(oldfileLen);"
+ "end "
//上次索引日查询打点状态
+ "local oldDotState = 0;"
+ "if(oldDayDotState ~= false) then "
+ " oldDotState = tonumber(oldDayDotState);"
+ "end "
//上次索引报警查询打点状态
// + "local oldAlarmDotState = 0;"
// + "if(oldAlarmTypeState ~= false) then "
// + " oldAlarmDotState = tonumber(oldAlarmTypeState);"
// + "end "
//如果块大小为0,设定一个固定值
+ "if(blockLen == 0) then "
+ " blockLen = 2048;"
+ "end "
//索引内容
+ "local beginIndex = 0;"
+ "local offSet = 0;"
+ "local blockSer = 0;"
+ "local insertTime = 0;"
+ "local updateTime = 0;"
+ "local indexTab = {};"
//开辟标识:0不开辟,1首次文件开辟,2重新开辟
+ "local blockFlag = 0;"
//如果没有文件内容,则是文件首次申请空间
+ "if(fileLen == 0) then "
+ " beginIndex = 0;"
//头1个字节,每块开始包含8字节对应车辆ID
+ " offSet = dataLen+1+8;&#
Lua脚本操作Redis字节数组例子
最新推荐文章于 2022-01-10 21:52:59 发布
这段Lua脚本主要用于处理Redis中的字节数组,涉及到空间索引的申请方法。通过读取和处理传入的参数,如数据长度、块生成时间和更新时间等,计算并更新字节数组的索引。脚本中包含了计算新索引、更新文件长度、处理多块数据等多种情况,最终将处理后的索引存储回Redis。
摘要由CSDN通过智能技术生成