淘淘商城系列——Redis五种数据类型介绍

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。下面我分别介绍之。css

String(字符串)

字符串是Redis中最基本的数据类型,它可以存储任何类型的字符串,包含二进制数据。能够用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串容许存储的最大容量为512MB。字符串是其余四种类型的基础,与其余几种类型的区别从本质上来讲只是组织字符串的方式不一样而已。web

实例

这里我将使用以下命令:redis

  • set——赋值,用法:set key value
  • get——取值,用法:set key
  • incr——递增数字,仅仅对数字类型的键有用,至关于Java的i++运算,用法:incr key
  • incrby——增长指定的数字,仅仅对数字类型的键有用,至关于Java的i+=3,用法:incrby key increment,其意思是key自增increment,increment能够为负数,表示减小。
  • decr——递减数字,仅仅对数字类型的键有用,至关于Java的i–,用法:decr key

咱们使用set命令在当前redis数据库里面设置一个key,名称为hello,值为abcd,而后再经过get命令取值。数据库

192.168.25.128:6379> set hello abcd
OK
192.168.25.128:6379> get hello
"abcd"

若是你们想要重置名称为hello的key的值,一样可以使用set命令,以下,再使用get命令取值,就能发现key的值已被修改。bash

192.168.25.128:6379> set hello 123
OK
192.168.25.128:6379> get hello
"123"

注意:get、set命令不区分大小写,但key是区分大小写的。若是你们不信,能够再使用set命令在当前redis数据库里面设置一个key,名称为Hello,值为456,而后使用keys *命令查看当前redis数据库这里面有多少个key。svg

192.168.25.128:6379> set Hello 456
OK
192.168.25.128:6379> keys *
1) "hello"
2) "Hello"

分别使用get命令取出以上两个键所对应的值,可发现键为hello所对应的值是123,键为Hello所对应的值是456。ui

192.168.25.128:6379> GET Hello
"456"
192.168.25.128:6379> get hello
"123"

接下来,演示incr和decr命令,关于这两个命令我上面已经详细讲解过了,这里只给出案例。spa

192.168.25.128:6379> incr hello
(integer) 124
192.168.25.128:6379> decr hello
(integer) 123
192.168.25.128:6379> decr hello
(integer) 122
192.168.25.128:6379> decr hello
(integer) 121
192.168.25.128:6379> decr hello
(integer) 120

Hash(哈希)

Hash类型至关于Java中的HashMap,它的值是一个字典,保存不少key-value对,每对key-value的值和键都是字符串类型,换句话说,Hash类型不能嵌套其余数据类型。对此,我也有我我的的理解:这种类型至关于一个key对应一个Map,Map中还有key-value对,使用hash可对key进行归类。code

实例

这里我将使用以下命令:server

  • hset——赋值,用法:hset key field value
  • hget——取值,用法:hget key field
  • hincrby——增长数字,仅对数字类型的值有用,用法:hincrby key field increment

咱们使用hset命令向hash中添加内容,以下所示。

192.168.25.128:6379> hset hash1 field1 1
(integer) 1
192.168.25.128:6379> hset hash1 field2 2
(integer) 1
192.168.25.128:6379> hset hash1 field3 3
(integer) 1
192.168.25.128:6379> hset hash2 field1 a
(integer) 1

注意:一个Hash类型键最多能够存储2∧32 - 1个键值对(40多亿)。
接着使用keys *命令查看当前redis数据库这里面有多少个key。

192.168.25.128:6379> keys *
1) "hash1"
2) "hello"
3) "hash2"
4) "Hello"

而后可使用hget命令从hash中取内容,以下所示。

192.168.25.128:6379> hget hash1 field1
"1"
192.168.25.128:6379> hget hash1 field2
"2"
192.168.25.128:6379> hget hash1 field3
"3"
192.168.25.128:6379> hget hash2 field1
"a"

最后,来演示一下hincrby命令,关于这个命令我上面已经详细讲解过了,这里只给出案例。

192.168.25.128:6379> hincrby hash1 field1 2
(integer) 3
192.168.25.128:6379> hincrby hash1 field1 1
(integer) 4
192.168.25.128:6379> hincrby hash1 field1 10
(integer) 14

List(列表)

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

实例

这里我将使用以下命令:

  • lpush——向列表左端添加元素,用法:lpush key value
  • lrange——获取列表中某一片断的元素,用法:lrange key start stop,index从0开始,-1表示最后一个元素。
  • rpush——向列表右端添加元素,用法:rpush key value
  • lpop——从列表左端弹出元素,用法:lpop key
  • rpop——从列表右端弹出元素,用法:rpop key

咱们使用lpush命令向list1列表左端添加元素,以下所示,而后使用lrange list1 0 -1命令查看所有元素。

192.168.25.128:6379> lpush list1 a b c d
(integer) 4
192.168.25.128:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"

注意:列表最多可存储2∧32 - 1元素 (4294967295, 每一个列表可存储40多亿)。
接着使用rpush命令向list1列表右端添加元素,以下所示,而后使用lrange list1 0 -1命令查看所有元素。

192.168.25.128:6379> rpush list1 1 2 3 4
(integer) 8
192.168.25.128:6379> lrange list1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"
8) "4"

紧接着,咱们使用lpop命令从列表左端弹出“d”元素,而后再次使用lrange list1 0 -1命令查看所有元素,以下所示。

192.168.25.128:6379> lpop list1
"d"
192.168.25.128:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
7) "4"

最后,咱们使用rpop命令从列表右端弹出“4”元素,而后再次使用lrange list1 0 -1命令查看所有元素,以下所示。

192.168.25.128:6379> rpop list1
"4"
192.168.25.128:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"

Set(集合)

Redis中的Set是string类型元素的集合,集合中每一个元素都是不一样的,集合中的元素个数最多为2的32次方-1个,集合中的元素是没有顺序的,并且不能重复。

实例

这里我将使用以下命令:

  • sadd——添加元素,用法:sadd key value1 [value2 value3 ...]
  • smembers——得到集合中全部元素,用法:smembers key
  • srem——删除元素,用法:srem key value2 [value2 value3 ...]

咱们首先使用sadd命令向set1集合中添加元素,而后使用smembers set1命令得到集合中的全部元素,以下所示。

192.168.25.128:6379> sadd set1 a b c c c d
(integer) 4
192.168.25.128:6379> smembers set1
1) "d"
2) "a"
3) "c"
4) "b"

注意:以上实例中“c”添加了三次,但根据集合内元素的惟一性,后两次插入的元素将被忽略。集合中最大的成员数为2∧32 - 1(4294967295,每一个集合可存储40多亿个成员)。
如今咱们使用srem命令删掉set1集合中的“a”元素,而后再使用smembers set1命令得到集合中的全部元素,以下所示。

192.168.25.128:6379> srem set1 a
(integer) 1
192.168.25.128:6379> smembers set1
1) "d"
2) "c"
3) "b"

zset(sorted set:有序集合)

Redis中的zset和set同样也是string类型元素的集合,且不容许重复的成员。不一样的是每一个元素都会关联一个double类型的分数。Redis正是经过分数来为集合中的成员进行从小到大的排序的。zset的成员是惟一的,但分数(score)却能够重复。

实例

这里我将使用以下命令:

  • zadd——添加元素,用法:zadd key score1 value1 [score2 value2 score3 value3 ...]
  • zrange——获取排名在某个范围的元素,用法:zrange key start stop [WITHSCORE],按照元素从小到大的顺序排序,从0开始编号,包含start和stop对应的元素,WITHSCORE选项表示是否返回元素分数。
  • zrevrange——获取排名在某个范围的元素,用法:zrevrange key start stop [WITHSCORE],和上一个命令用法同样,只是这个倒序排序的。
  • zrem——删除一个或多个元素,用法:zrem key value1 [value2 ...]

咱们首先使用zadd命令向zset1集合中添加元素,而后使用zrange zset1 0 -1命令得到集合中的全部元素(经过分数来为集合中的成员进行从小到大的排序),以下所示。

192.168.25.128:6379> zadd zset1 2 a 5 b 1 c 6 d
(integer) 4
192.168.25.128:6379> zrange zset1 0 -1
1) "c"
2) "a"
3) "b"
4) "d"

而后使用zrem命令删除zset1集合中的“a”元素,而后使用zrange zset1 0 -1命令得到集合中的全部元素(经过分数来为集合中的成员进行从小到大的排序),以下所示。

192.168.25.128:6379> zrem zset1 a
(integer) 1
192.168.25.128:6379> zrange zset1 0 -1
1) "c"
2) "b"
3) "d"

接着咱们使用zrevrange zset1 0 -1命令得到集合中的全部元素(经过分数来为集合中的成员进行从大到小的排序),以下所示。

192.168.25.128:6379> zrevrange zset1 0 -1
1) "d"
2) "b"
3) "c"

还可使用zrange zset1 0 -1 withscores命令查看元素及其分数,以下所示。

192.168.25.128:6379> zrange zset1 0 -1 withscores
1) "c"
2) "1"
3) "b"
4) "5"
5) "d"
6) "6"

固然了,也可以使用zrevrange zset1 0 -1 withscores命令查看元素及其分数,不过是经过分数来为集合中的成员进行从大到小排序的。

192.168.25.128:6379> zrevrange zset1 0 -1 withscores
1) "d"
2) "6"
3) "b"
4) "5"
5) "c"
6) "1"