本文共 2484 字,大约阅读时间需要 8 分钟。
Redis目前支持5种数据类型,分别是:
String(字符串)
List(列表)
Hash(字典)
Set(集合)
Sorted Set(有序集合)
下面就分别介绍这五种数据类型及其相应的操作命令。
String是简单的 key-value 键值对,value 不仅可以是 String,也可以是数字。String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
应用场景:
String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。
redis 127.0.0.1:6379> SET mykey "redis" OK redis 127.0.0.1:6379> GET mykey "redis"
Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
应用场景
Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop。
redis 127.0.0.1:6379> LPUSH learn redis(integer) 1redis 127.0.0.1:6379> LPUSH learn mongodb(integer) 2redis 127.0.0.1:6379> LPUSH learn mysql(integer) 3redis 127.0.0.1:6379> LRANGE learn 0 101) "mysql"2) "mongodb"3) "redis"
Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。
127.0.0.1:6379> HMSET learn name "redis tutorial" 127.0.0.1:6379> HGETALL learn1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes"6) "20"7) "visitors"8) "23000"
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
redis 127.0.0.1:6379> SADD learn redis(integer) 1redis 127.0.0.1:6379> SADD learn mongodb(integer) 1redis 127.0.0.1:6379> SADD learn mysql(integer) 1redis 127.0.0.1:6379> SADD learn mysql(integer) 0redis 127.0.0.1:6379> SMEMBERS learn1) "mysql"2) "mongodb"3) "redis"
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
redis 127.0.0.1:6379> ZADD learn 1 redis(integer) 1redis 127.0.0.1:6379> ZADD learn 2 mongodb(integer) 1redis 127.0.0.1:6379> ZADD learn 3 mysql(integer) 1redis 127.0.0.1:6379> ZADD learn 3 mysql(integer) 0redis 127.0.0.1:6379> ZADD learn 4 mysql(integer) 0redis 127.0.0.1:6379> ZRANGE learn 0 10 WITHSCORES1) "redis"2) "1"3) "mongodb"4) "2"5) "mysql"6) "4"
转载地址:http://lfkzb.baihongyu.com/