【lua】key是string,value是string组成的list

该代码段展示了如何在Lua中初始化一个表格localmyTable,并通过ifnot检查键是否存在来避免错误。然后使用table.insert向myTable的key1和key2下添加值。最后,使用pairs和ipairs遍历并打印表格内容。
local myTable = {}


if not myTable["key1"] then
  myTable["key1"] = {}
end
if not myTable["key2"] then
  myTable["key2"] = {}
end


table.insert(myTable["key1"], "value1")
table.insert(myTable["key1"], "value2")
table.insert(myTable["key1"], "value3")

table.insert(myTable["key2"], "value1")
table.insert(myTable["key2"], "value1")
table.insert(myTable["key2"], "value1")

for key, values in pairs(myTable) do
  print(key .. ":")
  for index, value in ipairs(values) do
    print("  " ..index .."  " .. value)
  end
end


打印:
key1:
  1  value1
  2  value2
  3  value3
key2:
  1  value1
  2  value1
  3  value1

@Component public class RedisUtils { private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); @Resource private RedisTemplate<String, Object> redisTemplate; public RedisUtils() { } public Boolean expire(final String key, long time, TimeUnit timeUnit) { return time <= 0L ? true : this.redisTemplate.expire(key, time, timeUnit); } public Boolean expire(final String key, long time) { return this.expire(key, time, TimeUnit.SECONDS); } public Long getExpire(final String key, TimeUnit timeUnit) { return this.redisTemplate.getExpire(key, timeUnit); } public Long getExpire(final String key) { return this.getExpire(key, TimeUnit.SECONDS); } public Boolean hasKey(final String key) { return this.redisTemplate.hasKey(key); } public void delete(final String... key) { if (key != null && key.length > 0) { if (key.length == 1) { this.redisTemplate.delete(key[0]); } else { this.redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } public Set<String> getKeys(String pattern) { return this.redisTemplate.keys(pattern); } public Set<String> scanKeys(String pattern) { return this.scanKeys(pattern, 500); } public Set<String> scanKeys(String pattern, Integer keyMaxCount) { Set<String> keys = new HashSet(); this.redisTemplate.execute((connection) -> { Cursor cursor = connection.scan((new ScanOptionsBuilder()).match(pattern).count((long)keyMaxCount).build()); while(cursor.hasNext()) { keys.add(new String((byte[])cursor.next())); } return null; }); return keys; } public void delete(Set<String> keys) { this.redisTemplate.delete(keys); } public Object get(final String key) { return this.redisTemplate.opsForValue().get(key); } public boolean set(final String key, Object value) { this.redisTemplate.opsForValue().set(key, value); return true; } public boolean set(final String key, Object value, long time, TimeUnit timeUnit) { if (time > 0L) { this.redisTemplate.opsForValue().set(key, value, time, timeUnit); return true; } else { return this.set(key, value); } } public boolean set(final String key, Object value, long time) { return this.set(key, value, time, TimeUnit.SECONDS); } public Boolean setIfAbsent(final String key, Object value) { return this.redisTemplate.opsForValue().setIfAbsent(key, value); } public Object getAndSet(final String key, Object newValue) { return this.redisTemplate.opsForValue().getAndSet(key, newValue); } public Long increment(final String key, long delta) { return this.redisTemplate.opsForValue().increment(key, delta); } public Long decrement(final String key, long delta) { return this.redisTemplate.opsForValue().decrement(key, delta); } public Object hget(final String key, String item) { return this.redisTemplate.opsForHash().get(key, item); } public Map<Object, Object> hmget(final String key) { return this.redisTemplate.opsForHash().entries(key); } public void hmset(final String key, Map<String, Object> map) { this.redisTemplate.opsForHash().putAll(key, map); } public void hmset(final String key, Map<String, Object> map, long time, TimeUnit timeUnit) { this.redisTemplate.opsForHash().putAll(key, map); if (time > 0L) { this.expire(key, time, timeUnit); } } public void hmset(final String key, Map<String, Object> map, long time) { this.hmset(key, map, time, TimeUnit.SECONDS); } public void hset(final String key, String hashKey, Object value) { this.redisTemplate.opsForHash().put(key, hashKey, value); } public void hset(final String key, String hashKey, Object value, long time, TimeUnit timeUnit) { this.redisTemplate.opsForHash().put(key, hashKey, value); if (time > 0L) { this.expire(key, time, timeUnit); } } public void hset(final String key, String item, Object value, long time) { this.hset(key, item, value, time, TimeUnit.SECONDS); } public void hdel(final String key, Object... hashKeys) { this.redisTemplate.opsForHash().delete(key, hashKeys); } public boolean hHasKey(final String key, String hashKey) { return this.redisTemplate.opsForHash().hasKey(key, hashKey); } public long hincrement(final String key, String hashKey, long delta) { return this.redisTemplate.opsForHash().increment(key, hashKey, delta); } public long hdecrement(final String key, String hashKey, long delta) { return this.redisTemplate.opsForHash().increment(key, hashKey, -delta); } public Set<Object> sGet(final String key) { return this.redisTemplate.opsForSet().members(key); } public Boolean sHasKey(final String key, Object value) { return this.redisTemplate.opsForSet().isMember(key, value); } public Long sSet(final String key, Object... values) { return this.redisTemplate.opsForSet().add(key, values); } public Long sSetAndTime(final String key, long time, TimeUnit timeUnit, Object... values) { Long count = this.redisTemplate.opsForSet().add(key, values); if (time > 0L) { this.expire(key, time, timeUnit); } return count; } public long sSetAndTime(final String key, long time, Object... values) { return this.sSetAndTime(key, time, TimeUnit.SECONDS, values); } public Long sGetSetSize(final String key) { return this.redisTemplate.opsForSet().size(key); } public Long setRemove(final String key, Object... values) { return this.redisTemplate.opsForSet().remove(key, values); } public <T> T runLua(String lua, Class<T> returnType, List<String> keys, List<String> values) { RedisConnectionFactory redisConnectionFactory = this.redisTemplate.getConnectionFactory(); if (null != redisConnectionFactory && redisConnectionFactory.getConnection() instanceof LettuceClusterConnection) { DefaultRedisScript<T> redisScript = new DefaultRedisScript(lua, returnType); List<byte[]> args = (List)keys.stream().map(String::getBytes).collect(Collectors.toList()); List<byte[]> valuesByte = (List)values.stream().map(String::getBytes).collect(Collectors.toList()); args.addAll(valuesByte); LettuceClusterConnection lettuceClusterConnection = (LettuceClusterConnection)redisConnectionFactory.getConnection(); return lettuceClusterConnection.scriptingCommands().eval(redisScript.getScriptAsString().getBytes(), ReturnType.fromJavaType(redisScript.getResultType()), keys.size(), (byte[][])args.toArray(new byte[args.size()][])); } else { return this.redisTemplate.execute((connection) -> { Object nativeConnection = connection.getNativeConnection(); if (nativeConnection instanceof JedisCluster) { return ((JedisCluster)nativeConnection).eval(lua, keys, values); } else { return nativeConnection instanceof Jedis ? ((Jedis)nativeConnection).eval(lua, keys, values) : null; } }); } } } 这是RedisUtils方法
11-06
public String get(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.get(key); } public void set(String key, String value) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.set(key, value); } public void setex(String key, int seconds, String value) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.setex(key, seconds, value); } public void del(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.del(key); this.logger.fine(String.format("del:%s", key)); } /** @deprecated */ @Deprecated public String getBy3Key(String key1, String key2, String key3) { return ""; } /** @deprecated */ @Deprecated public void setBy3Key(String key1, String key2, String key3, String value) { } /** @deprecated */ @Deprecated public void setexBy3Key(String key1, String key2, String key3, int seconds, String value) { } /** @deprecated */ @Deprecated public void delBy3Key(String key1, String key2, String key3) { } public Long incr(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.incr(key); } public List<String> mget(String... keys) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.mget(keys); } public void mset(String... keysvalues) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.mset(keysvalues); } public void hset(String key, String field, String value) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.hset(key, field, value); } public String hget(String key, String field) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hget(key, field); } public Long hincr(String key, String field, long value) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hincrBy(key, field, value); } public Set<String> hkeys(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hkeys(key); } public List<String> hvals(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hvals(key); } public Map<String, String> hgetAll(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hgetAll(key); } public void hmset(String key, Map<String, String> hash) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.hmset(key, hash); } public List<String> hmget(String key, String... fields) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hmget(key, fields); } public void hdel(String key, String... fields) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.hdel(key, fields); this.logger.fine(String.format("hdel:%s,%s", key, Arrays.toString(fields))); } public void lpush(String key, String... strings) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.lpush(key, strings); } public void rpush(String key, String... strings) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.rpush(key, strings); } public List<String> lrange(String key, long start, long end) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.lrange(key, start, end); } public String lpop(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.lpop(key); } public String rpop(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.rpop(key); } public void sadd(String key, String... members) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.sadd(key, members); } public Set<String> smembers(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.smembers(key); } public String spop(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.spop(key); } public Set<String> keys(String pre) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.keys(pre); } public void expire(String key, int ex) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); jedis.expire(key, ex); } public Long ttl(String key) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.ttl(key); } public Long LkmSequenceHincr(String field) { String SEQUENCE_REDIS = "EJB:SEQUENCE:AUTOINCR"; Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hincrBy(SEQUENCE_REDIS, field, 1L); } public Long[] LkmSequenceBatch(String field, int qty) { Long[] sequenceArr = new Long[qty]; for(int i = 0; i < qty; ++i) { sequenceArr[i] = this.LkmSequenceHincr(field); } return sequenceArr; } public Long setnx(String key, String value) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.setnx(key, value); } public Long hsetnx(String key, String field, String value) { Jedis jedis = (Jedis)this.ctx.getContextData().get("REDIS"); return jedis.hsetnx(key, field, value); } public boolean getSwitchStatus(String switchName) { String result = this.hget("CONFIG:LKM开关:开关集合", switchName); return this.getBoooleanStatus(result); } private boolean getBoooleanStatus(String src) { if (StringUtils.isBlank(src)) { return false; } else { src = src.trim(); return src.matches("(?i)(on)|(true)|(yes)"); } }通过上述操作redis方法实现
07-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值