vString(字符串)

String是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

String类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

String类型是Redis最基本的数据类型,一个键最大能存储512MB。

Demo

image.png

在以上Demo中我们使用了 Redis 的 SET 和 GET 命令。

vHash(哈希)

Redis hash 是一个键值对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Demo


以上Demo中 hash 数据类型存储了包含用户脚本信息的用户对象。 Demo中我们使用了 Redis HMSET, HEGTALL 命令,cityhash 为键值。

每个 hash 可以存储 232 - 1键值对(40多亿)。

127.0.0.1:6379> hmset city:name bj sh sz gd hz tj
OK
127.0.0.1:6379> hgetall  city:name
1) "bj"
2) "sh"
3) "sz"
4) "gd"
5) "hz"
6) "tj"

vList(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

Demo   展示list时,数据成倒叙,先进后出

127.0.0.1:6379> lpush  list list1 list2 list3
3
127.0.0.1:6379> lrange list 0 2
list3
list2
list1

列表最多可存储 232 - 1元素 (4294967295, 每个列表可存储40多亿)。

vSet(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd 命令:添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误。

sadd key member

127.0.0.1:6379> sadd sett  set1 set2
2
127.0.0.1:6379> smembers sett
set1
set2

以上Demo中 "BEIJING" 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。返回0

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

vZset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

zadd 命令:添加元素到集合,元素在集合中存在则更新对应score

    在创建时指定数据的下标

127.0.0.1:6379> zadd zset 0  zset1 1 zset2 2  zset3
3
127.0.0.1:6379> zrangebyscore zset 0 3
zset1
zset2
zset3

Stream是什么

在一般的编程概念里,流是一种主要用于优化内存的数据类型,它不需要一次性把大量数据,比如说大文件一次性读取到内存再处理,可以边读取边处理,这样可以用少量内存就可以处理大文件。

因此简单地说,流是Redis一种新的数据结构,不需要读取原有key的值,就可以在此key中添加新内容的数据类型。

Stream添加

Stream可以用更抽象的方式来记录数据,比如说日志。

Stream类型存储的不是一个字符串,而是多个键值对,比如:

XADD mystream * -id  temperature 
>

代表往mystream添加新的数据 { "sensor-id": 1234, "temperature": 19.8 }, *代表服务器端生成一个新的EntryID

1518951480106-0 是代表这组数据的EntryID值,可以理解为日志中的行号。1518951480106是当前时间的毫秒值,0代表这一时侯的第几个数据。可以用XLEN查看总数据个数。

> XLEN mystream
(integer) 1

也可以自己指定EntryID的值,如:

> XADD somestream 0-1 field value
0-1
> XADD somestream 0-2 foo bar
0-2

流是只增不减的,所以如果entryid值比之前的小,则会报错:

> XADD somestream 0-1 foo bar
(error) ERR The ID specified in XADD is equal or smaller than the target stream top item

Stream查询

可以用 XRANGE/XREVRANGE 来查找,- + 代表查找所有的。

> XRANGE mystream - +

可以指定EntryID的值范围,可以理解为取某个时间段的日志内容

> XRANGE mystream 1518951480106 1518951480107
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"

可以只取前两个

> XRANGE mystream - + COUNT 2
1) 1) 1519073278252-0
   2) 1) "foo"
      2) "value_1"
2) 1) 1519073279157-0
   2) 1) "foo"
      2) "value_2"