¿Cómo consultar valores usando el tipo hash en Redis?
En Redis, los resultados de este tipo de consultas no se pueden comparar por valor.
Pero puedes usar diferentes tipos de estructuras de datos para lograr esta función, como la siguiente definición de datos:
usuarios:1 {nombre:Jack,edad:28,ubicación:shanghai}
usuarios:2 {nombre:Frank,edad:30,ubicación.:Beijing}
usuarios:ubicación:shanghai
donde usuarios:1 usuarios:2 La información de dos usuarios se define respectivamente: usuarios: ubicación: shanghai registra todos los ID de usuario en Shanghai a través de la estructura de datos hash en Redis y se implementa a través de la estructura de datos de recopilación.
Jedis jedis = jedisPool.getResource();SetshanghaiIDs = jedis.members("users:location:shanghai");// Iterar a través del conjunto //...// Obtener el usuario correspondiente a través de hgetall Información jedis.hgetAll("users: " + shanghaiIDs[0]);
Con este conjunto de índices de ID, algunas consultas complejas que siguen son impotentes (por supuesto, no se puede esperar que Redis implemente lo mismo como base de datos relacional), Redis no puede hacer esto);
Pero no puede esperar que Redis implemente consultas como bases de datos relacionales, Redis no puede hacer esto);
Pero no puede esperar que Redis para implementar consultas como una base de datos relacional, Redis no puede hacer esto);
Pero no puede esperar que Redis implemente consultas como una base de datos relacional, Redis no puede hacer esto.
Pero Redis 2.6 integra scripts Lua, lo que le permite ejecutar scripts Lua directamente en el entorno RedisServer a través del comando eval, y puede llamar a los comandos Redis en scripts Lua.
De hecho, esto significa que puede utilizar un lenguaje de secuencias de comandos como Lua para operar con valores clave almacenados en Redis, lo cual es muy significativo. Incluso varios servicios requeridos por su sistema se pueden escribir como una secuencia de comandos Lua;
public static final String SCRIPT = "local resultKeys={}; "+ "para k,v en ipairs(KEYS) do " + " local tmp = redis.call('hget', v); " + "local tmp = redis.call('hget', v); "+ "tmp local = redis.call('hget', v); "+ "tmp local = redis.call('hget', v); 'hget', v, 'age'); "+ " si tmp > ARGV[1] entonces "+ " table.insert(resultKeys,v); "+ " end; "; Ejecute el código de script Jedis jedis = jedisPool.getResource();jedis.auth(auth);Listkeys=Arrays.asList(allUserKeys);Listargs=new ArrayList<>();args.add("28" );ListresultKeys = (List)jedis.evalsha(funcKey,keys,args);return resultKeys;
Nota: el código anterior utiliza el comando evalsha y los parámetros de este comando no son cadenas de script Lua directas, sino un Índice SHA de funciones que se han cargado en Redis de antemano. Todas las funciones que el sistema necesita ejecutar se cargan en Redis de antemano a través del siguiente código. Nuestro sistema mantiene una tabla hash de funciones y qué funciones deben implementarse posteriormente. obtenga el índice SHA de la función correspondiente de la tabla de funciones y llámelo a través de evalsha