Redis五种数据类型

redis是一个键值对的数据库,其中value支持五种基本数据类型:字符串类型(String),散列类型(hash),集合类型(set),列表类型(list),有序集合类型(zset)。

一、String(字符串)

String是redis最基本的数据类型,一个key对应一个value,一个键最大能存储512MB。

String类型是二进制安全的(也就是说redis的String可以包含任何数据。例如图片或者序列化对象),对字符串的一些常用的操作命令如下:

1)set key value:设置指定key的值
2)get key:获取指定的key的值
3)getrance key_name start end:用于获取存储在指定key的字符串的字字符串。子字符串的截取范围由 start 和 end 这 两个偏移量决定(包括 start 和 end )。

例如:

test:0>set mykey "this is my test key"
OK

test:0>getrange mykey 0 3
this

test:0>getrange mykey 0 -1
this is my test key

4)getset key_name value:设置指定key的值,并返回key的旧值。
返回值:返回给定的key的旧值。当key没有旧值的时候,即key值不存在时,返回null 。当key值存在但不是字 符串类型时,返回一个错误。

例如:当key没有旧值时

test:0>getset db mongodb         
NULL

test:0>get db
mongodb

当key有旧值的时候

test:0>getset db redis          
mongodb

test:0>get db
redis

当key存在但不是字符串类型时

test:0>lpush list 1               
1

test:0>getset list 2              
WRONGTYPE Operation against a key holding the wrong kind of value

二、Hash(哈希)

Redis hash是一个键值(key>=value)对的集合。
Redis hash是一个String类型的field 和 value的映射表,hash特别适合用于存储对象。
一些常用的操作命令如下:

1) hedel key_name field1………fieldn:用于删除哈希表key中的一个或多个指定字段,不存在的字段将被忽略。

例如:

test:0>hset myhash field2 "foo"     
1
test:0>hgetall myhash
1) field2
2) foo
test:0>hdel myhash field2
1
test:0>hdel myhash field2
0

2)hexists key_name field_name:用于查看哈希表指定字段是否存在。
返回值:如果哈希表含有给定的字段,返回1。如果不含有或key不存在,返回0。

例如:

test:0>hset myhash field2 "foo"
1

test:0>hexists myhash field2
1

test:0>hexists myhash field1
0

3)hget key_name field_name:用于返回哈希表中指定字段的值。
返回值:返回给定子段的值。如果给定的字段或key不存在时,返回null

4)hkeys key_name:获取所有哈希表中的字段
返回值:包含哈希表中所有域列表。当key不存在时,返回一个空表。
例如:

test:0>hkeys myhash
1) field2
test:0>hkeys myhashs

5)hlen key_name:用于获取哈希表中字段的数量
返回值:哈希表中字段的数量。当key不存在时,返回0。

6)hvals key_name:返回哈希表所有域的值
返回值:包含哈希表中所有域列表。当key不存在时,返回一个空表。

例如:

test:0>hset myhash field2 "foo"
1
test:0>hset myhash field1 "f001"
1
test:0>hvals myhash
1) foo
2) f001

三、List(列表)

Redis列表是简单的字符串列表,按照插入的顺序,你可以添加一个元素到列表中的头部(左边)或者尾部(右边)。列表最多可存储2的23次幂-1个元素(4294967295,每个列表最多可存储40多亿)。
一些常用的操作命令如下:

1)lindex key_name index_position:用于通过索引获取列表中的元素。也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。
返回值:列表中下标为指定索引值的元素。如果指定索引值不再在列表的区间范围内,返回null。

例如:

test:0>lpush mylist "world"           
1

test:0>lpush mylist "hello"
2

test:0>lindex mylist 0
hello

test:0>lindex mylist -1
world

test:0>lindex mylist -2
hello

test:0>lindex mylist 3
NULL

2)linsert key_name before existing_value new _value:在列表的元素前或者后插入元素,当指定元素不存在列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果key不是列表类型,返回一个错误。
返回值:如果命令执行成功,返回插入操作完成之后列表的长度。如果没有找到指定元素,返回-1。如果key不存在或为空列表,返回0。
例如:

test:0>linsert mylist before "world" "three"     插入元素
3

test:0>lrange mylist 0 -1                                输出元素
1) hello
2) three
3) world
test:0>linsert mylist before "aa""bb"            指定元素不存在
-1

test:0>linsert mylis before "aa""bb"                 key值不存在
0

test:0>set name "aa"
OK

test:0>linsert name before "aa""bb"                key值不是列表类型 
WRONGTYPE Operation against a key holding the wrong kind of value

3)llen key_name:用于返回列表的长度。如果列表key不存在,则key会被解释为一个空列表,返回0。如果key不是列表类型,返回一个错误。
返回值:列表的长度
例如:

test:0>llen mylist
3

4)lpop key:移出并获取列表的第一个元素
返回值列表的第一个元素,当列表key不存在时,返回null
例如:

test:0>lpop list1
NULL

test:0>lpop mylist
hello

5)rpop key:移出并获取列表的最后一个元素
返回值列表的最后一个元素,当列表key不存在时,返回null

6)lrange key_name start end:返回列表中指定区间内的元素,区间以偏移量start和end指定。其中0表示列表的一个元素,1表示列表中的第二个元素,也可以使用负数下标,-1表示列表的最后一个元素,-2表示列表的倒数第二个元素。
返回值:一个列表,包含指定区间内的元素

四 、Redis集合(set)

Redis的Set是String类型的无序集合。
集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。

1)sadd key_name value1..valuen:将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如key不存在,则创建一个只包含添加元素作成员的集合。当key不是集合类型时,返回一个错误。
返回值:被添加到集合中的新元素的数量,不包括被忽略的元素。
例如:

test:0>sadd myset "hello" "foo"
2

test:0>sadd myset "hello"
0

test:0>smembers myset
1) foo

2)scard key_name:返回集合中元素的数量
返回值:集合的数量。当集合key不存在时,返回0。
例如:

test:0>scard myset
2

3)smembers key_name:返回集合中所有成员。不存在的集合key视为空集合。
返回值:集合中所有成员。
例如:

test:0>smembers myset
1) foo
2) hello

五、zset (sorted set有序集合)

Redis zset和set一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的。但是分数(score)却可以重复。
一些常用的操作命令如下:

1)zadd key_name key_name score1 value1….valuen:
将一个或多个成员元素及其分数值加入到有序集合中,如果某个成员已经是有序集合的成员,那么更新这个成员的分数值并通过重新插入这个成员元素来保证该成员在正确的位置上。分数值可以是整数值或双精度浮点数。
如果有序集合key不存在,则创建一个空的有序集并执行zadd操作。
当key存在但不是有序集类型时,返回一个错误。
返回值:被成功添加的新成员的数量,不包括那些被更新的,已经存在成员。
例如:

test:0>zadd mysets 1 "one"
1

test:0>zadd mysets 2 "two"
1

test:0>zadd mysets 3 "two" 3 "three"
1

test:0>zrange mysets 0 -1 withscores
1) one
2) 1
3) three
4) 3
5) two

2)zcard key_name :用于计算集合中元素的数量
返回值:当key存在且是有序集类型时,返回有序集合的基数。当key不存在时,返回0
例如:

test:0>zcard mysets
3

以上就是对redis的基本数据类型的介绍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章