Quiero actualizar mi SET. Vi que no es posible, pero puedo hacer SREM y SADD nuevamente.
El problema es que no puedo encontrar el valor anterior con SREM. mis datos son:
{"owner_id":30902468,"qu1":{"q1":"test","a1":"test"},"qu2":{"q2":"test","a2":"test"},"qu3":{"q3":"test","a3":"test"},"created_at":1648925484846,"score":1,"ip":"NA"} Puedo obtener esto con own_id, así que await redis.srem("qa", backtick{"owner_id":${owner_id}*backtick); Sin embargo, no funciona.
Aquí está mi código completo:
import Redis from "ioredis"; export default async function create(req, res) { const redis = new Redis(process.env.U_REDIS_URL); const { q1, a1, q2, a2, q3, a3, owner_id } = req.body; if (!q1 && !a1) { res.status(400).json({ error: "Type at least one question", }); } else if (q1.length < 150) { const newEntry = { owner_id, qu1: { q1, a1 }, qu2: { q2, a2 }, qu3: { q3, a3 }, created_at: Date.now(), score: 1, ip: "NA", }; await redis.srem("qa", `{"owner_id":${owner_id}*`); // THIS IS NOT WORKING - DONT KNOW HOW TO GET OLD VALUE await redis.sadd("qa", JSON.stringify(newEntry)); res.status(200).json({ body: "success", }); } else { res.status(400).json({ error: "Max 150 characters please.", }); } await redis.quit(); }El comando SREM no puede tener comodines. Esto simplemente no funcionará. Para eliminar un elemento de un conjunto, debe proporcionar el miembro completo. Así por ejemplo:
> SADD foo apple > SADD foo alpine > SADD foo alpha Para reemplazar apple con banana no puede ingresar SREM foo ap* y luego SADD foo banana . Tienes que coincidir con todo el miembro:
> SREM foo apple > SADD foo banana Según su ejemplo, creo que una mejor solución sería almacenar su cadena JSON en una Cadena (o tal vez RedisJSON si esa es una opción) con una clave de qa:30902468 y luego simplemente almacenar las ID de propietario en el Conjunto.
> SET qa:30902468 '{"owner_id":30902468,"qu1":{"q1":"test","a1":"test"},"qu2":{"q2":"test","a2":"test"},"qu3":{"q3":"test","a3":"test"},"created_at":1648925484846,"score":1,"ip":"NA"}' > SADD qa 30902468Luego, cuando necesite cambiar la cadena, simplemente cambie la Cadena:
> SET qa:30902468 '{ "some": "other", "JSON": true }'Y cuando necesite leer todas las cosas en el Conjunto, solo solicite al Conjunto las ID:
> SMEMBERS qa 1) "30902468" 2) "30902469" 3) "30902470"Y luego consulte las cadenas en función de las ID devueltas:
> GET qa:30902468 > GET qa:30902469 > GET qa:30902470Lo que básicamente está haciendo aquí es administrar su propio índice usando Conjuntos en Redis.