Redis数据类型:
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
一、String(字符串)
string是redis最基本的类型,你能够理解成与Memcached如出一辙的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string能够包含任何数据。好比jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
实例:
经常使用命令:
Redis SET 命令用于设置给定 key 的值。若是 key 已经存储其余值, SET 就覆写旧值,且无视类型。
若是 key 不存在,返回 nil 。若是key 储存的值不是字符串类型,返回一个错误。
删除已存在的键。不存在的 key 会被忽略。
- 将 key 中储存的数字值增一:INCR KEY_NAME
若是 key 不存在,那么 key 的值会先被初始化为 0 ,而后再执行 INCR 操做。
若是值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操做的值限制在 64 位(bit)有符号数字表示以内。
- 将 key 中储存的数字值减一:DECR KEY_NAME
若是 key 不存在,那么 key 的值会先被初始化为 0 ,而后再执行 DECR 操做。
若是值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操做的值限制在 64 位(bit)有符号数字表示以内。
-
-
- 将 key 中储存的数字加上指定的增量值:INCRBY KEY_NAME INCR_AMOUNT
若是 key 不存在,那么 key 的值会先被初始化为 0 ,而后再执行 INCRBY 命令。
若是值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操做的值限制在 64 位(bit)有符号数字表示以内。
- 将 key 所储存的值减去指定的减量值:DECRBY KEY_NAME DECREMENT_AMOUNT
若是 key 不存在,那么 key 的值会先被初始化为 0 ,而后再执行 DECRBY 操做。
若是值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操做的值限制在 64 位(bit)有符号数字表示以内。
- 为指定的 key 追加值:APPEND KEY_NAME NEW_VALUE
若是 key 已经存在而且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的 末尾。
若是 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 同样。
二、Hash(哈希)
Redis hash 是一个键名对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
实例:
以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中咱们使用了 Redis HMSET, HGETALL 命令,user:1为键值。
每一个 hash 能够存储 232 -1 键值对(40多亿)。
经常使用命令:
- 设置值:HSET KEY_NAME FIELD VALUE
Redis Hset 命令用于为哈希表中的字段赋值 。
若是哈希表不存在,一个新的哈希表被建立并进行 HSET 操做。
若是字段已经存在于哈希表中,旧值将被覆盖。
- 获取值:HGET KEY_NAME FIELD_NAME
Redis Hget 命令用于返回哈希表中指定字段的值。
Redis Hgetall 命令用于返回哈希表中,全部的字段和值。
在返回值里,紧跟每一个字段名(field name)以后是字段的值(value),因此返回值的长度 是哈希表大小的两倍。
- 同时将多个 field-value (域-值)对设置到哈希表 key 中:HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。
此命令会覆盖哈希表中已存在的字段。
若是哈希表不存在,会建立一个空哈希表,并执行 HMSET 操做。
- 获取全部给定字段的值:HMGET KEY_NAME FIELD1...FIELDN
Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。
若是指定的字段不存在于哈希表,那么返回一个 nil 值。
- 删除一个或多个哈希表字段:HDEL KEY_NAME FIELD1.. FIELDN
Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
- 为哈希表 key 中的指定字段的整数值加上增量 increment:HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。
增量也能够为负数,至关于对指定字段进行减法操做。
若是哈希表的 key 不存在,一个新的哈希表被建立并执行 HINCRBY 命令。
若是指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
对一个储存字符串值的字段执行 HINCRBY 命令将形成一个错误。
本操做的值被限制在 64 位(bit)有符号数字表示以内。
- 查看哈希表 key 中,指定的字段是否存在;HEXISTS KEY_NAME FIELD_NAME
Redis Hexists 命令用于查看哈希表的指定字段是否存在。
若是哈希表含有给定字段,返回 1 。 若是哈希表不含有给定字段,或 key 不存在,返回 0 。
- 获取哈希表中字段的数量:HLEN KEY_NAME
Redis Hlen 命令用于获取哈希表中字段的数量。
哈希表中字段的数量。 当 key 不存在时,返回 0 。
- 获取全部哈希表中的字段:HKEYS KEY_NAME
Redis Hkeys 命令用于获取哈希表中的全部字段名。
包含哈希表中全部字段的列表。 当 key 不存在时,返回一个空列表。
Redis Hvals 命令返回哈希表全部字段的值。
一个包含哈希表中全部值的表。 当 key 不存在时,返回一个空表。
三、List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你能够添加一个元素到列表的头部(左边)或者尾部(右边)。
列表最多可存储 232 - 1 元素 (4294967295, 每一个列表可存储40多亿)。
经常使用命令:
- 将一个或多个值插入到列表头部: LPUSH KEY_NAME VALUE1.. VALUEN
Redis Lpush 命令将一个或多个值插入到列表头部。 若是 key 不存在,一个空列表会被建立并执行 LPUSH 操做。 当 key 存在但不是列表类型时,返回一个错误。
eg:127.0.0.1:6379> lpush mylist a b c
- 在列表中添加一个或多个值:RPUSH KEY_NAME VALUE1..VALUEN
Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
若是列表不存在,一个空列表会被建立并执行 RPUSH 操做。 当列表存在但不是列表类型时,返回一个错误。
eg:127.0.0.1:6379> rpush mylist2 a b c
- 获取列表指定范围内的元素: LRANGE KEY_NAME START END
Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
eg:127.0.0.1:6379> lrange mylist 0 5
127.0.0.1:6379> lrange mylist2 0 -1
- 移出并获取列表的第一个元素:LPOP KEY_NAME
Redis Lpop 命令用于移除并返回列表的第一个元素。
eg:127.0.0.1:6379> lpop mylist
- 移除并获取列表最后一个元素:RPOP KEY_NAME
Redis Rpop 命令用于移除并返回列表的最后一个元素。
eg:127.0.0.1:6379> rpop mylist2
Redis Llen 命令用于返回列表的长度。 若是列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 若是 key 不是列表类型,返回一个错误。
eg:127.0.0.1:6379> llen mylist
- 将一个或多个值插入到已存在的列表头部: LPUSHX KEY_NAME VALUE1.. VALUEN
Redis Lpushx 将一个或多个值插入到已存在的列表头部,列表不存在时操做无效。
eg:127.0.0.1:6379> lpushx mylist x
- 为已存在的列表添加值:RPUSHX KEY_NAME VALUE1..VALUEN
Redis Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。若是列表不存在,操做无效。
eg:127.0.0.1:6379> rpushx mylist2 4
- 移除列表元素: LREM KEY_NAME COUNT VALUE
Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值能够是如下几种:
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中全部与 VALUE 相等的值。
eg:127.0.0.1:6379> lrem mylist3 2 2 从头开始删除两个键值为2的数据
eg:127.0.0.1:6379> lrem mylist3 -2 2 从末尾开始删除两个键值为2的数据
eg:127.0.0.1:6379> lrem mylist3 0 1 删除全部键值为1的数据
- 经过索引设置列表元素的值:LSET KEY_NAME INDEX VALUE
Redis Lset 经过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。
eg:127.0.0.1:6379> lset mylist 3 cc
- 在列表的元素前或者后插入元素: LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
Redis Linsert 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操做。 当列表不存在时,被视为空列表,不执行任何操做。 若是 key 不是列表类型,返回一个错误。
eg:127.0.0.1:6379> linsert mylist3 before b 888
127.0.0.1:6379> linsert mylist3 after b 999
- 移除列表的最后一个元素,并将该元素添加到另外一个列表并返回:RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME
Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另外一个列表并返回。
eg:127.0.0.1:6379> rpoplpush mylist5 mylist6
四、Set(集合)
Redis的Set是string类型的无序集合。
集合是经过哈希表实现的,因此添加,删除,查找的复杂度都是O(1)。
sadd 命令
添加一个string元素到,key对应的set集合中,成功返回1,若是元素已经在集合中返回0,key对应的set不存在返回错误。
注意:以上实例中 lisi添加了两次,但根据集合内元素的惟一性,第二次插入的元素将被忽略。
集合中最大的成员数为 232 - 1(4294967295, 每一个集合可存储40多亿个成员)。
五、zset(sorted set:有序集合)
Redis zset 和 set 同样也是string类型元素的集合,且不容许重复的成员。
不一样的是每一个元素都会关联一个double类型的分数。redis正是经过分数来为集合中的成员进行从小到大的排序。
zset的成员是惟一的,但分数(score)却能够重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
zadd key score member