tipo - que es redis nosql
Estructuras de datos complejas Redis (3)
Digamos que tengo un hash de un hash, por ejemplo
$data = {
''harry'' : {
''age'' : 25,
''weight'' : 75,
},
''sally'' : {
''age'' : 25,
''weight'' : 75,
}
}
- ¿Cuál sería la forma "habitual" de almacenar dicha estructura de datos (o no?)
- ¿Sería capaz de obtener un valor directamente (por ejemplo, obtener Harry: la edad?
- Una vez almacenado podría cambiar directamente el valor de una clave secundaria (por ejemplo, sally: peso = 100)
¿Cuál sería la forma "habitual" de almacenar dicha estructura de datos (o no?)
Por ejemplo, harry y sally se almacenarían cada uno en hashes separados donde los campos representarían sus propiedades, como la edad y el peso. Luego, set estructura mantendría a todos los miembros (harry, sally, ...) que has almacenado en redis.
¿Sería capaz de obtener un valor directamente (por ejemplo, obtener Harry: la edad?)
Sí, vea HGET o HMGET o HGETALL .
Una vez almacenado podría cambiar directamente el valor de una clave secundaria (por ejemplo, sally: peso = 100)
Sí, mira HSET .
Depende de lo que quieras hacer, pero si tu estructura de datos no está anidada más profundamente y necesitas acceso a cada campo, te recomendaría usar hashes: hashes
Aquí hay una buena visión general sobre los tipos de datos redis, cada uno con pro y contra: http://redis.io/topics/data-types
Tomemos datos complejos que tenemos que almacenar en redis, por ejemplo este:
$data = {
"user:1" : {
name : "sally",
password : "123"
logs : "25th october" "30th october" "12 sept",
friends : "34" , "24", "10"
}
"user:2" :{
name : ""
password : "4567"
logs :
friends: ""
}
}
El problema que enfrentamos es que los amigos y los registros son listas. Entonces, lo que podemos hacer para representar estos datos en redis es utilizar hashes y enumerar algo como esto:
Opción 1. Un mapa hash con claves como usuario: 1 y usuario: 2
hmset user:1 name "sally" password "12344"
hmset user:2 name "pally" password "232342"
create separate list of logs as
logs:1 { here 1 is the user id }
lpush logs:1 "" "" ""
lpush logs:2 "" "" ""
and similarly for friends.
Opción 2: un mapa hash con datos json descartados como codificación de cadena
hmset user:1 name "sally" password "12344" logs "String_dumped_data" friends "string of dumped data"
Opción 3: Esta es otra representación de # 1
something like user:1:friends -> as a list
and user:2:friends -> as a list
Por favor corrígeme si estoy equivocado.