redis数据结构
1、string
string 是 redis 最基本的数据类型,一个 key 对应一个 value,最大能存储 512MB。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。
示例:
127.0.0.1:7000> set key value -> Redirected to slot [12539] located at 127.0.0.1:7002 OK 127.0.0.1:7002> get key "value" 127.0.0.1:7002> del key (integer) 1
2、hash
hash是键值对的形式,类似java中的map。每个 hash 可以存储 232 -1 键值对(40多亿)。
示例:
127.0.0.1:7002> hset hkey field1 value1 (integer) 1 127.0.0.1:7002> hmset hkey field2 value2 field3 value3 OK 127.0.0.1:7002> hkeys hkey 1) "field1" 2) "field2" 3) "field3" 127.0.0.1:7002> hlen hkey (integer) 3 127.0.0.1:7002> hmget hkey field1 field2 1) "value1" 2) "value2" 127.0.0.1:7002> hdel hkey field1 field2 field3 (integer) 3
3、list
list是有序的集合,类似java中的数组,支持在前后端插入、获取、删除元素。
示例:
127.0.0.1:7002> lpush lkey value1 -> Redirected to slot [9755] located at 127.0.0.1:7001 (integer) 1 127.0.0.1:7001> rpush lkey value2 value3 (integer) 3 127.0.0.1:7001> lrange lkey 0 2 1) "value1" 2) "value2" 3) "value3" 127.0.0.1:7001> llen lkey (integer) 3 127.0.0.1:7001> lpop lkey "value1" 127.0.0.1:7001> rpop lkey "value3" 127.0.0.1:7001> llen lkey (integer) 1
这里可以利用lrange+lrem实现弹出多个元素,类似循环lpop,但是需要注意的是lrange+lrem需要在外部保证事务的完整性。
4、set
set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。set集合的值具有唯一性。
示例:
127.0.0.1:7001> sadd skey value1 value2 value1 (integer) 2 127.0.0.1:7001> smembers skey 1) "value2" 2) "value1"
5、sorted set(zset)
zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
示例:
127.0.0.1:7001> zadd zkey 1 value1 (integer) 1 127.0.0.1:7001> zadd zkey 1 value2 (integer) 1 127.0.0.1:7001> zadd zkey 1 value3 (integer) 1 127.0.0.1:7001> zadd zkey 1 value1 (integer) 0 127.0.0.1:7001> zrange zkey 0 3 1) "value1" 2) "value2" 3) "value3"