pitón ReDiS guión lua combate un limitador de flujo o tomar un negocio sobre rojo

El conocimiento Point

Lo 1.lua
2.redis, relación lua, pitón (Java) de tres
3. servicio portador lua lógica

¿Por qué unirse a un script lua

  • Reducir sobrecarga de la red. Las múltiples solicitudes se pueden enviar en forma de una secuencia de comandos, para reducir la latencia de la red
  • operación atómica. Redis guión completo en su conjunto llevará a cabo, no va a ser insertado en el medio de otros comandos. Por lo tanto, en el proceso de escritura del guión sin preocuparse por las condiciones de carrera ocurrir, sin el uso de una transacción.
  • Multiplexación. Pasos enviados por el cliente serán permanentemente presente en Redis, para que otros clientes pueden ser multiplexados sin necesidad de utilizar el código de script que realice la misma lógica.

Instalación del entorno de lua

La dirección de prueba de la máquina en la máquina centos-30 virtuales
montado referirse Redis instalación
ps: Guía de instalación para el modo de clúster, esta única instancia puede Redis Demo, referencia a los pasos anteriores, sin utilizar parte de la escritura de rubí.

  • Para su instalación depende y Lua:
> yum install -y readline
> yum install -y readline-devel
> wget http://www.lua.org/ftp/lua-5.1.1.tar.gz
> tar -zxvf lua-5.1.1.tar.gz -C /usr/local/
> cd /usr/local/lua-5.1.1
> make linux
> make install

  • verificación
> lua
> print("hello world")
> hello world

Redis Lua script llama de tres maneras * eval

  • evalsha
  • Guión cargar
    el script lua eval para la ejecución directa, el siguiente uso
EVAL script numkeys key [key ...] arg [arg ...] > eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second 1) "key1" 2) "key2" 3) "first" 4) "second" 

rediskey a ser operado en nombre de la clave
arg puede pasar parámetros personalizados
numkeys utilizados para identificar unos cuantos clave
guión es que se escribe un script lua
script de lua se utiliza dentro de las teclas [1] y ARGV [1] para obtener la clave de acceso y Arg

lua Sintaxis ver lua tutorial

local result=0
    local id= redis.call('get',KEYS[1])
if id then
    result= redis.call('sismember',id,KEYS[2])
end
 
if result==1 then
    redis.call('expire',KEYS[1],ARGV[1])
end
  
return result

modo 1

redis-cli  --eval 1.lua 2 user1 user:list 1800

modo 2

  redis-cli  eval "$(1.lua)" 2 user1 user:list 1800

modo 3

  redis-cli  script load "$(cat 1.lua)"
  redis-cli  evalsha 2cfe726fe60678e8ed4d689a3e98727d1e1e2339 1 test 1
  • Demo del nombre de archivo de script: redis.lua
redis.call('set','age','18')
local age = redis.call('get','age')
return age;

  • Inicio Redis
> /usr/local/redis-3.2.9/src/redis-server /usr/local/redis-3.2.9/redis.conf 
  • Ejecutar script
    Desde conf dispuesto en la ip bind, -h especifica a continuación para que el anfitrión. Realizado con el comando eval
> /usr/local/redis-3.2.9/src/redis-cli -h 192.168.1.30 -p 6379 --eval /usr/local/luadir/redis.lua
>"18"     #set了age,并返回了value = 18

En este momento, si la conexión ReDiS Redis-cli. * teclas pueden ver la edad de esta clave.

Redis Lua script llama con parámetros

  • Sintaxis:
    / Redis-cli -h 192.168.1.30 -p 6379 --eval / .lua key1 clave2 ..., valor1 valor2 *
  • Escritura de contenido:
--获取key1 的值,并赋值给local age
local age = redis.call('get', KEYS[1]);
if age == 18 then
redis.call('set',KEYS[2],ARGV[1])
end

Cuando key1 = "edad" el valor es 18, conjunto key2 = "nombre" a la "mawenxia" valor

  • Ejecutar el script
> /usr/local/redis-3.2.9/src/redis-cli -h 192.168.1.30 -p 6379 --eval /usr/local/luadir/redis-arg.lua age name , mawenxia

  • Podemos ver una más clave para el nombre, y el contenido es "mawenxia"

    [Imagen falló subida ... (imagen-90eef1-1540882227440)]

operación pitón ReDiS guión lua

import redis
pool = redis.ConnectionPool(host="localhost", port=6379, db=0) r = redis.Redis(connection_pool=pool) lua_2 = """ local ret = redis.call("get", KEYS[1]) return ret """ script_2 = r.register_script(lua_2) print(script_2(keys=["hugo"])) 

resultados:


 
image.png

operativo Java Script Redis Lua

public class TestSingleRedis {

    private static Jedis jedis; //单实例[] private static ShardedJedis shard; //分片[] private static ShardedJedisPool pool; //池化[apache common - pool2] 
  • NOTA: Como se trata de una secuencia de comandos de llaves tiene el valor "myhash", es necesario insertar los datos Redis, de lo contrario se toma el valor de vaciar.

Lua tipo de tabla

  • Lua tipo de tabla similar a una matriz. La diferencia es que con otros lenguajes, Lua puede utilizar cualquier tipo como subíndice.
 //定义空表
T1={} 
//赋值 T1["name"] = "mawenxia" T1["age"] = 18 //其他赋值方式 T1.name = "mawenxia" T1.age = 18 //其他赋值方式 T1.person = {name="mawenxia",age=18} 
  • Instalación de herramientas Lua Cjson
> wget http://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz
> tar -zvxf lua-cjson-2.1.0.tar.gz -C /usr/local/
> cd /usr/local/lua-cjson-2.1.0/
> vim Makefile
> 修改PREFIX 变量为/usr/local  保存
> make install
> cp cjson.so /usr/local/lib/lua/5.1/

  • Lua tipo de tabla y vinculante Cjson. La operación de hash puede ser convenientemente del tipo de redis de datos

Redis Lua guión se combinan para lograr la apropiación de una escena sobre rojo

  • Principalmente el uso del script lua atómica Redis +. Para evitar la misma situación dos veces para agarrar el usuario.
  • Premisa: Cuando un usuario inicia un sobre rojo, de acuerdo con el número de buena cantidad de distribución, en lugar de prisa cuando redistribución. Después de la asignación en la lista Redis.
  • La idea básica: dos Lista1 (rojo sin asignar), lista2 (rojo después de la dispensación) y un conjunto. El uso conjunto de la llave no se puede repetir para determinar si el usuario ha sido robado.
  • Lograr un funcionamiento en un período de tres Lua script para garantizar la atomicidad. 1: id de usuario tomada de la serie, se determina si el gancho agarrador, no existe identificación, avanza a la etapa 2.2: Pop un retirado de la lista1 rojo. 3: Para empujar en un identificador de usuario agarrar rojo y lista2.
  • Por último, la información de los sistemas de negocio list2 se puede leer después de la asignación

Referencia:
http://xiaorui.cc/2016/03/27/%E8%AF%A6%E8%A7%A3python%E8%B0%83%E7%94%A8redis-lua%E5%86%85%E5 % B5% 8C% E8% 84 % 9A% E6% 9C% AC% E7% 9A% 84% E9% AB% 98% E7% BA% A7% E7% 94% A8% E6% B3% 95 /

https://www.jianshu.com/p/bec0d7cf0b43

https://www.jianshu.com/p/d88e7359b025

 
 
0 personas pulgares para arriba
 
 


Autor: hugoren
enlace: https: //www.jianshu.com/p/e7a3243b61e6
Fuente: libros de Jane
tienen derechos de autor por el autor. reimpresión comercial póngase en contacto con el autor autorizada, reimpresión no comercial por favor indique la fuente.

Supongo que te gusta

Origin www.cnblogs.com/ExMan/p/12622626.html
Recomendado
Clasificación