本文共 3448 字,大约阅读时间需要 11 分钟。
转:
一、常用数据类型简介:
redis常用五种数据类型:string,hash,list,set,zset(sorted set).
1.String类型
String是最简单的类型,一个key对应一个value
String类型的数据最大1G。 String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下,该integer的值限制在64位有符号数。在list、set和zset中包含的独立的元素类型都是Redis String类型。
2.List类型
链表类型,主要功能是push、pop、获取一个范围的所有值等。其中的key可以理解为链表的名字。
在Redis中,list就是Redis String的列表,按照插入顺序排序。比如使用LPUSH命令在list头插入一个元素,使用RPUSH命令在list的尾插入一个元素。当这两个命令之一作用于一个空的key时,一个新的list就创建出来了。
List的最大长度是2^32-1个元素。
3.Set类型
集合,和数学中的集合概念相似。操作中的key理解为集合的名字。
在Redis中,set就是Redis String的无序集合,不允许有重复元素。
Set的最大元素数是2^32-1。
Redis中对set的操作还有交集、并集、差集等。
4.ZSet(Sorted Set)类型
Zset是set的一个升级版本,在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。
Zset的最大元素数是2^32-1。
对于已经有序的zset,仍然可以使用SORT命令,通过指定ASC|DESC参数对其进行排序。
5.hash类型
hash是最接近关系结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。
1 sadd 命令:
sadd <key> <member> [<member>...] 将一个或多个member加入到key中,如果已经存在,则会被忽略。如果key不存在,则会默认创建该集合。如果key不是集合类型,返回错误。
redis 127.0.0.1:6379> sadd amimal 'cat' 'dog' 'pig' # 添加多个元素 (integer) 3 redis 127.0.0.1:6379> sadd amimal 'monkey' 'cat' # 添加重复的元素被忽略 (integer) 1 redis 127.0.0.1:6379>
2 smembers 命令:
smembers <key> 返回key中所有的成员列表。如果key不存在,则返回空。
redis 127.0.0.1:6379> smembers amimal 1) "monkey" 2) "pig" 3) "cat" 4) "dog" redis 127.0.0.1:6379> smembers products (empty list or set) redis 127.0.0.1:6379>
3 srem 命令:
srem <key> <member> [<member>...] 移除key中的一个或者多个member元素,如果不存在,则会被忽略。如果key不存在,则返回空。
redis 127.0.0.1:6379> srem amimal 'dog' # 移除已存在的元素 (integer) 1 redis 127.0.0.1:6379> smembers amimal 1) "pig" 2) "cat" 3) "monkey" redis 127.0.0.1:6379> srem amimal 'chicken' # 移除不存在的元数 (integer) 0 redis 127.0.0.1:6379> smembers amimal 1) "monkey" 2) "cat" 3) "pig"
还有其他命令请参考——redis命令参考
Hash是一种数据结构,一般翻译做“散列”,也有直接音译为“哈希”。Redis hash 是一个string类型的field和value的映射表。它特别适合用于存储对象。同将对象的每个字段存成单个string类型,存储为hash类型会占用更少的内存,并且方便的存取整个对象。
下面是关于hash类型存储的一些常用方法(命令):
1,hset 命令:
hset <key> <field> <value> 将hash表key中的field域设置为值value。如果field值不存在,操作成功后返回1,如果field值已经存在,则覆盖原来的值,成功后返回0。
redis 127.0.0.1:6379> hset user name 'zhangsan' # 设置值为zhangsan (integer) 1 redis 127.0.0.1:6379> hset user name 'lisi' # 将值覆盖为lisi (integer) 0 redis 127.0.0.1:6379>
2,hget 命令: hget <key> <field> 返回哈希表 key 中给定域 field 的值。
redis 127.0.0.1:6379> hget user name "lisi"
3,hsetnx 命令: hsetnx <key> <field> <value> 当且紧当filed域不存在时,设置值为value。如果该域不存在,返回1,如果该域已经存在,则不会执行操作,且返回0。
redis 127.0.0.1:6379> hget user name "zhangsna" redis 127.0.0.1:6379> hsetnx user name 'lisi' (integer) 0 # 将name域的值设置为lisi时操作失败,因为name域已经存在 redis 127.0.0.1:6379> hsetnx user age 22 # 将age域的值设置为22,操作成功,应为age域不存在 (integer) 1 redis 127.0.0.1:6379> hget user name # 取出name的值,并没有被修改 "zhangsna" redis 127.0.0.1:6379> hget user age "22" redis 127.0.0.1:6379>4,hmset 命令:
hmset <key> <field> <value> [<field> <value>...] 同时将多个“域-值”对存储在key键中,如果key不存在会自动创建,如果field已经存在,则会覆盖原来的值。操作成功后返回值OK。
redis 127.0.0.1:6379> hmset product name 'computer' price '3200' size '14inch' OK
5,hmget 命令: hmget <key> <field> [<field>....] 返回hash表key中的一个或者多个域值。如果给定的域名称在此hash表中不存在,则返回nil。
redis 127.0.0.1:6379> hmget product name price size contact 1) "computer" # name的值 2) "3200" # price的值 3) "14inch" # size的值 4) (nil) # contact的值在hash表中不存在,返回nil
至于string,list,zset的操作r edis命令参考 转载地址:http://sispi.baihongyu.com/