文档章节

Redis lua 常用脚本记录

阿影
 阿影
发布于 2015/08/11 13:27
字数 358
阅读 105
收藏 6

1、根据唯一索引查询对象

适用范围: 对象使用JSON序列化, {model_name}:id 作为 key,属性中有唯一索引与 id映射

例如:

public class User {
    public Long userId;
    public String userName; // unique
    public String email;    // unique
}

在 Redis 中一个 User (userId = 123456) 包含以下键值:

// 曾经登录过的用户 id 记录
hash key => "ub:123",  field => "456",   value => loginTimes
// u:{id} => user json
key: "u:123456", value => "{\"userId\":123456,\"userName\":\"foo\",\"email\":\"bar@foo.com\"}"
// u_email:{email} => userId
key: "u_email:bar@foo.com", value => "123456"
// u_name:{userName} => userId
key: "u_name:foo", value => "123456"

在 Redis 中使用 lua 脚本通过唯一索引查询 user json:

local uid = redis.call('GET', KEYS[1])
local model_name = ARGV[1]
if uid ~= nil then
    return redis.call('GET', model_name..':'..uid)
end
return ''
redis-cli --eval model_byindex.lua u_email:bar@foo.com , u

2、根据属性索引查找对象列表

适用范围:对象使用JSON序列化, {model_name}:id 作为 key,属性中有索引与 id映射

例如:

public class Category {
    public Integer id;
    public String name;
    public Integer parentId;
}

在 Redis 中一个 Category(id = 4, name=子分类, parentId=1) 包含以下键值:

// cate:{id} => category json
key: cate:4, value: "{\"id\":4,\"name\":\"子分类\",\"parentId\":1}"
// cate~idx:{pid}:ids  => children cate ids (zSet)
key: cate~idx:1:ids, value: [4, 5, 6]

在 Redis 中使用 lua 脚本通过索引(parentId)查询 category json:

local ids = redis.call('ZRANGE', KEYS[1], 0, -1)
local model_name = ARGV[1]
if ids ~= nil and next(ids) ~= nil then
    local keys = {}
    for _, v in ipairs(ids) do
        table.insert(keys, model_name..':'..v)
    end
    if next(keys) ~= nil then
        return redis.call('MGET', unpack(keys))
    end
    return {};
end
return {}
redis-cli --eval List_byIndex.lua cate~idx:1:ids , cate

未完待续……

© 著作权归作者所有

阿影
粉丝 30
博文 7
码字总数 2382
作品 0
浦东
架构师
私信 提问
Redis脚本插件之————执行Lua脚本示例

Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis...

tinywan1227
2016/10/20
0
0
Tinywan/lua-nginx-redis

在线文档(Online documentation) 目录 Nginx 教程 (Nginx tutorial) Nginx编译安装 Nginx.conf详解和配置 Location 详解和配置 Nginx基础知识 Nginx高性能WEB服务器详解 Nginx高并发系统...

Tinywan
2018/01/07
0
0
如何优雅地在Redis中使用Lua

作者:可均可可 原文:http://www.cnblogs.com/PatrickLiu/p/8391829.html 一、引言 今天讲一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大...

程序员之家_
02/08
0
0
Redis进阶实践之七Redis和Lua初步整合使用

Redis进阶实践之七Redis和Lua初步整合使用 一、引言 Redis学了一段时间了,基本的东西都没问题了。从今天开始讲写一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何...

morpheusWB
2018/09/13
31
2
Lua + Redis 优惠券领券设计

一、业务背景   优惠券业务主要提供用户领券和消券的功能;领取优惠券的动作由用户直接发起,由于资源有限,我们必须对用户的领取动作进行一些常规约束。   约束1(优惠券维度): 券的最大...

xiaomin0322
06/11
88
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部