I'm using hash keys to store user details like:
hmset user:1 user_name lee age 21
hmset user:2 user_name david age 25
hmset user:3 user_name chris age 25
I need to search for users having age = 25
, name = lee
. How to do a search for a specified value in a given field?
Redis Hash is a data structure available in Redis that stores the mapping of keys to values. Here, both the key and the value are strings. The key-value pairs are unordered. Keys are unique and no duplicates are allowed.
Newer Secondary Indices with RediSearch zeeSQL is a novel Redis modules with SQL and secondary indexes capabilities, allowing search by value of Redis keys. You can set it up in such a way to track the values of all the hashes and put them into a standard SQL table.
To list the keys in the Redis data store, use the KEYS command followed by a specific pattern. Redis will search the keys for all the keys matching the specified pattern. In our example, we can use an asterisk (*) to match all the keys in the data store to get all the keys.
Redis Hashes are maps between the string fields and the string values. Hence, they are the perfect data type to represent objects. In Redis, every hash can store up to more than 4 billion field-value pairs.
You cannot. Redis is a key-value store, not a relational database.
In order to search for a specific data, you need to build an access path to this data. For instance, to get the users having age = 25, you need to build an index to map the age values to users. It can be done with a set. This is the same for the name.
Once you have sets for age and name, you can search users by intersecting the sets. For example:
# Add 3 users
hmset user:1 user_name lee age 21
hmset user:2 user_name david age 25
hmset user:3 user_name chris age 25
# Maintain age index
sadd age:21 1
sadd age:25 2 3
# Maintain name index
sadd name:lee 1
sadd name:david 2
sadd name:chris 3
# Get the ID of users having age = 25 and name = lee
sinter age:25 name:lee
-> will return an empty set
Acually You can do it with put values in key
HMSET lee:25 user_name lee age 25
HMSET massi:43 user_name massi age 43
HMSET lee:24 user_name lee age 24
HMSET lee:28 user_name lee age 28 city Berlin
Now you can find them with "keys" command
127.0.0.1:6379> keys *:25
1) "lee:25"
127.0.0.1:6379> keys lee*
1) "lee:25"
2) "lee:24"
3) "lee:28"
127.0.0.1:6379> keys massi:43
1) "massi:43"
Finally find specific hashes
127.0.0.1:6379> HGETALL lee:24
1) "user_name"
2) "lee"
3) "age"
4) "24"
All that I said is that you can do it in two steps put any number of values that you need in key then find them. But consider that it's not a good idea to put all values inside key Just put ones that you need to do filtering with. Cheers :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With