###Strings类型及操作 String是最简单的类型,一个Key对应一个Va1ue,string类型是二进制安全的。 Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。 Set方法 设置key对应的值为string类型的value 例如:我们添加一个name=lijie的键值对。 ``` [root@hadoop redis]# bin/redis-cli 127.0.0.1:6379> set name liguodong OK 127.0.0.1:6379> get name "liguodong" ``` Setnx方法 设置key对应的值为string类型的va1ue,如果 key已经存在,返回0,nx是not exist的意思。如果不存在,则返回1。 例如:我们添加一个name=lijie_new键值对。 ``` 127.0.0.1:6379> setnx name liguodong_new (integer) 0 127.0.0.1:6379> get name "liguodong" ``` Setex 设置key对应的值为string类型的va1ue,并指定此键值对应的有效期。 例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒。 ``` 127.0.0.1:6379> setex haircolor 10 red OK 127.0.0.1:6379> get haircolor "red" 127.0.0.1:6379> get haircolor ``` Setrange 设置指定key的va1ue值的子字符串 例如:我们希望将lijie的126邮箱替换为gmail邮箱。 ``` 127.0.0.1:6379> get email "liguodong@163.com" 127.0.0.1:6379> setrange email 10 gmail.com (integer) 19 127.0.0.1:6379> get email "liguodong@gmail.com" ``` mset 一次设置多个key的值,成功返回ok,表示所有的值都设置了; 失败返回0,表示没有任何值被设置。 ``` 127.0.0.1:6379> mset username root password liguodong OK 127.0.0.1:6379> get username "root" 127.0.0.1:6379> get password "liguodong" ``` msetnx 一次设置多个key的值,成功返回ok,表示所有的值都设置了, 失败返回0,表示没有任何值被设置,但是不会覆盖已经存在的key。 ``` 127.0.0.1:6379> msetnx user xiaoming age 18 sex male (integer) 1 127.0.0.1:6379> get user "xiaoming" 127.0.0.1:6379> get age "18" 127.0.0.1:6379> get sex "male" ``` getset 设置key的值,并返回key的旧值。 ``` 127.0.0.1:6379> getset user xiaofang "xiaoming" ``` getrange 获取key的value值的子字符串。 getrange name 0 5 ``` 127.0.0.1:6379> getrange email 0 8 "liguodong" ``` mget 一次获取多个key的值,如果对应key不存在,则对应返回nil。 ``` 127.0.0.1:6379> mget user age sex 1) "xiaofang" 2) "18" 3) "male" ``` incr 对key的值做加加操作,并返回新的值。key不存在时候会设 置key,并认为原来的va1ue是0。 incrby 同incr类似,加指定值,key不存在时候会设 置key,并认为原来的va1ue是0。 ``` 127.0.0.1:6379> incr age (integer) 19 127.0.0.1:6379> incr age (integer) 20 127.0.0.1:6379> incrby age 5 (integer) 25 ``` decr 对key的值做减减操作。 decrby 同decr类似,减指定值。 ``` 127.0.0.1:6379> decr age (integer) 24 127.0.0.1:6379> decr age (integer) 23 127.0.0.1:6379> decrby age 3 (integer) 20 127.0.0.1:6379> decrby age -5 (integer) 25 ``` append 给指定key的字符串追加value,返回新字符 串值的长度。 ``` 127.0.0.1:6379> get name "liguodong" 127.0.0.1:6379> append name @sina.com (integer) 18 127.0.0.1:6379> get name "liguodong@sina.com" ``` strlen 取指定key的va1ue值的长度。 ``` 127.0.0.1:6379> strlen name (integer) 18 ``` ###hashes类型 hashes类型及操作 Redis hash是一个string类型的field和value的映射。 它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象。 相较于将对象的每个字段存成单个string类型。 将一个对象存储在hash类型中会占用更少的内存; 并且可以更方便的存取整个对象。 hset 设置hash field为指定值,如果key不存在,则先创建。 127.0.0.1:6379> hset user:001 name liguodong (integer) 1 127.0.0.1:6379> hget user:001 name "liguodong" hsetnx 设置hash field为指定值,如果key不存在,则先创建。 如果存在,返回0。 ``` 127.0.0.1:6379> hget user:002 name "coco" 127.0.0.1:6379> hsetnx user:002 name koko (integer) 0 127.0.0.1:6379> hget user:002 name "coco" ``` hmset 同时设置hash的多个field。 127.0.0.1:6379> hmset user:003 username liguodong passwd smd OK 127.0.0.1:6379> hget user:003 username "liguodong" 127.0.0.1:6379> hget user:003 passwd "smd" 127.0.0.1:6379> hmget user:003 username passwd 1) "liguodong" 2) "smd" hincrby 指定的hash field加上给定值。 127.0.0.1:6379> hget user:003 age "110" 127.0.0.1:6379> hincrby user:003 age 5 (integer) 115 hexists 测试指定field是否存在。存在返回1,不存在返回0。 hlen 返回指定hash的field数量。 127.0.0.1:6379> hexists user:003 age (integer) 1 127.0.0.1:6379> hlen user:003 (integer) 3 hdel 删除指定hash的field。 127.0.0.1:6379> hlen user:003 (integer) 3 127.0.0.1:6379> hdel user:003 age (integer) 1 127.0.0.1:6379> hlen user:003 (integer) 2 hkeys 返回hash的所有field。 127.0.0.1:6379> hkeys user:003 1) "username" 2) "passwd" hvals 返回hash的所有value。 127.0.0.1:6379> hvals user:003 1) "liguodong" 2) "smd" hgetall 获取某个hash中全部的field及value。 127.0.0.1:6379> hgetall user:003 1) "username" 2) "liguodong" 3) "passwd" 4) "smd" ###lists类型 lists类型及操作 List是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等, 操作中key理解为链表的名字。 Redis的list类型其实就是一个每个子元素都是 string类型的双向链表。 我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既 可以作为栈,又可以作为队列。 lpush 在key对应list的头部添加字符串元素。 ``` 127.0.0.1:6379> lpush mylist "world" (integer) 1 127.0.0.1:6379> lpush mylist "hello" (integer) 2 127.0.0.1:6379> lpush mylist "liguodong" (integer) 3 127.0.0.1:6379> lpush mylist "dear" (integer) 4 #0表示从头的第一个元素,-1表示从尾的第一个元素。 127.0.0.1:6379> lrange mylist 0 -1 1) "dear" 2) "liguodong" 3) "hello" 4) "world" ``` rpush 在key对应list的尾部添加字符串元素。 ``` 127.0.0.1:6379> rpush list2 "I" (integer) 1 127.0.0.1:6379> rpush list2 "Love" (integer) 2 127.0.0.1:6379> rpush list2 "You" (integer) 3 127.0.0.1:6379> lrange list2 0 -1 1) "I" 2) "Love" 3) "You" ``` linsert 在key对应list的特定位置前或后添加字符串 ``` 127.0.0.1:6379> rpush muma "one" (integer) 1 127.0.0.1:6379> rpush muma "two" (integer) 2 127.0.0.1:6379> rpush muma "three" (integer) 3 127.0.0.1:6379> linsert muma before "two" "one2" (integer) 4 127.0.0.1:6379> lrange muma 0 -1 1) "one" 2) "one2" 3) "two" 4) "three" ``` lset 设置list中指定下标的元素值。 ``` 127.0.0.1:6379> rpush indexlist "gogogo" (integer) 1 127.0.0.1:6379> rpush indexlist "oaoaoa" (integer) 2 127.0.0.1:6379> lset indexlist 0 "baby" OK 127.0.0.1:6379> lrange indexlist 0 -1 1) "baby" 2) "oaoaoa" ``` lrem 从key对应liSt中删除n个和value相同的元素 (n<0从尾删除,n=0全部删除) ``` 127.0.0.1:6379> lrange dellist 0 -1 1) "world" 2) "hello" 3) "hello" 4) "hello" 127.0.0.1:6379> lrem dellist 2 "hello" (integer) 2 127.0.0.1:6379> lrange dellist 0 -1 1) "world" 2) "hello" ``` ltrim 保留指定key的值范围类的数据。 ``` 127.0.0.1:6379> lrange trimlist 0 -1 1) "five" 2) "four" 3) "three" 4) "two" 5) "one" 127.0.0.1:6379> ltrim trimlist 1 2 OK 127.0.0.1:6379> lrange trimlist 0 -1 1) "four" 2) "three" ``` lpop 从list的头部删除元素,并返回删除元素。 rpop 从list的尾部删除元素,并返回删除元素。 ``` 127.0.0.1:6379> lrange poplist 0 -1 1) "five" 2) "four" 3) "three" 4) "two" 5) "one" 127.0.0.1:6379> lpop poplist "five" 127.0.0.1:6379> lrange poplist 0 -1 1) "four" 2) "three" 3) "two" 4) "one" 127.0.0.1:6379> rpop poplist "one" 127.0.0.1:6379> lrange poplist 0 -1 1) "four" 2) "three" 3) "two" ``` rpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部。 ``` 127.0.0.1:6379> lrange poplist 0 -1 1) "four" 2) "three" 3) "two" 127.0.0.1:6379> lrange trimlist 0 -1 1) "four" 2) "three" 127.0.0.1:6379> rpoplpush poplist trimlist "two" 127.0.0.1:6379> lrange poplist 0 -1 1) "four" 2) "three" 127.0.0.1:6379> lrange trimlist 0 -1 1) "two" 2) "four" 3) "three" ``` lindex 返回名称为key的list中index位置的元素。 ``` 127.0.0.1:6379> lrange trimlist 0 -1 1) "two" 2) "four" 3) "three" 127.0.0.1:6379> lindex trimlist 0 "two" 127.0.0.1:6379> lindex trimlist 3 (nil) 127.0.0.1:6379> lindex trimlist 2 "three" ``` llen 返回key对应list的长度 ``` 127.0.0.1:6379> llen trimlist (integer) 3 ``` ###sets类型 sets类型及操作 Set是集合,它是String类型的无序集合。Set是通过 hash table实现的,添加、删除和查找的复杂度都是 0(1)。对集合我们可以取并集、交集、差集。通过这 些操作我们可以实现sns中的好友推荐和b1og的tag功能。 sadd 向名称为key的set中添加元素。 ``` 127.0.0.1:6379> sadd myset "hello" (integer) 1 127.0.0.1:6379> sadd myset "world" (integer) 1 127.0.0.1:6379> sadd myset "world" (integer) 0 #查看元素 127.0.0.1:6379> smembers myset 1) "world" 2) "hello" ``` srem 删除名称为key的set中元素。 ``` 127.0.0.1:6379> srem myset "hello" (integer) 1 127.0.0.1:6379> smembers myset 1) "world" ``` spop 随机返回并删除名称为key的set中一个元素。 ``` 127.0.0.1:6379> smembers myset 1) "angle" 2) "world" 3) "baby" 4) "anglelababy" 127.0.0.1:6379> spop myset "baby" 127.0.0.1:6379> smembers myset 1) "angle" 2) "world" 3) "anglelababy" 127.0.0.1:6379> spop myset "anglelababy" 127.0.0.1:6379> smembers myset 1) "angle" 2) "world" ``` sdiff 返回所有给定key与第一个key的差集 ``` 127.0.0.1:6379> smembers myset 1) "bobo" 2) "koko" 3) "bbbb" 4) "world" 5) "angle" 6) "coco" 127.0.0.1:6379> smembers myset2 1) "koko" 2) "jjjj" 3) "coco" 127.0.0.1:6379> sdiff myset myset2 1) "angle" 2) "world" 3) "bobo" 4) "bbbb" 127.0.0.1:6379> sdiff myset2 myset 1) "jjjj" ``` sdiffstore 返回所有给定key与第一个key的差集, 并将结果存为另一个key。 ``` 127.0.0.1:6379> sdiffstore myset12 myset myset2 (integer) 4 127.0.0.1:6379> sdiffstore myset21 myset2 myset (integer) 1 127.0.0.1:6379> smembers myset12 1) "angle" 2) "world" 3) "bobo" 4) "bbbb" 127.0.0.1:6379> smembers myset21 1) "jjjj" ``` sinter 返回所有给定key的交集 sinterstore 返回所有给定key的交集,并将 结果存为另一个key。 sunion 并集 sunionstore 返回所有给定key的并集,并将 结果存为另一个key。 ``` 127.0.0.1:6379> sunionstore myset3 myset2 myset (integer) 7 127.0.0.1:6379> smembers myset3 1) "bobo" 2) "koko" 3) "jjjj" 4) "bbbb" 5) "angle" 6) "world" 7) "coco" ``` smove 从第一个key对应的set中移除member并添加到 第二个对应的set中 ``` 127.0.0.1:6379> sadd myset4 yesyes (integer) 1 127.0.0.1:6379> smove myset3 myset4 bbbb (integer) 1 127.0.0.1:6379> smembers myset4 1) "yesyes" 2) "bbbb" ``` scard 返回名称为key的set的元素个数。 ``` 127.0.0.1:6379> scard myset3 (integer) 6 ``` sismember 测试member是否是名称为key的set的元素。 ``` 127.0.0.1:6379> sismember myset3 jjjj (integer) 1 127.0.0.1:6379> sismember myset3 bbbb (integer) 0 ``` srandmember 随机返回名称为key的set的一个元素,但不删除元素。 ``` 127.0.0.1:6379> srandmember myset3 "bobo" 127.0.0.1:6379> srandmember myset3 "coco" ``` ###sorted sets类型 sorted set是set的一个升级版本,它在set的基础上 增加了一个顺序属性,这一属性在添加修改元素的时 候可以指定,每次指定后,zset会自动重新按新的值 调整顺序。可以理解为有两列的mysql表,一列存 value,一列存顺序。操作中key理解为zset的名字。 zadd 向名称为key的zset中添加元素member,score 用于排序。如果该元素存在,则更新其顺序。 ``` 127.0.0.1:6379> zadd myzset 1 one (integer) 1 127.0.0.1:6379> zadd myzset 2 two (integer) 1 127.0.0.1:6379> zadd myzset 3 two (integer) 0 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "3" 127.0.0.1:6379> zrange myzset 0 -1 1) "one" 2) "two" ``` zrem 删除名称为key的zset中的元素member。 ``` 127.0.0.1:6379> zrem myzset two (integer) 1 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "one" 2) "1" ``` zincrby 如果在名称为key的zset中已经存在元素member, 则该元素的score增加increment。 否则向该集合中添加该元素,其score的值为increment。 ``` 127.0.0.1:6379> zincrby myzset 2 one "3" 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "one" 2) "3" ``` zrank 返回元素的索引值。 ``` 127.0.0.1:6379> zrange myzset2 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379> zrank myzset2 two (integer) 1 127.0.0.1:6379> zrank myzset2 four (integer) 3 ``` zrevrank 返回元素降序的索引值。 ``` 127.0.0.1:6379> zrevrank myzset2 four (integer) 0 127.0.0.1:6379> zrevrank myzset2 one (integer) 3 ``` zrevrange 返回名称为key的zset(按Score从大到小顺序) 中的index从start到end的所有元素。 ``` 127.0.0.1:6379> zrevrange myzset2 0 -1 withscores 1) "four" 2) "4" 3) "three" 4) "3" 5) "two" 6) "2" 7) "one" 8) "1" ``` rangebyscore 返回集合中给定区间的元素。 ``` 127.0.0.1:6379> zrange myzset2 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379> zrangebyscore myzset2 2 4 withscores 1) "two" 2) "2" 3) "three" 4) "3" 5) "four" 6) "4" ``` zcount 返回集合中给定区间的数量。 ``` 127.0.0.1:6379> zcount myzset2 2 4 (integer) 3 ``` zcard 返回集合中所有元素的数量。 ``` 127.0.0.1:6379> zcard myzset2 (integer) 4 ``` zremrangebyrank 删除有序集合保存在key开始和结束的排序所有元素。 无论是开始和结束都以0基础索引,其中0是得分最低的元素。 这些索引可以是负数,在那里它们表明起始于具有最高得分的元素偏移。 ``` 127.0.0.1:6379> zrange myzset2 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "four" 8) "4" 127.0.0.1:6379> zremrangebyrank myzset2 1 2 (integer) 2 ``` zremrangebyscore 删除的有序集合保存在key的最小值和最大值(含)之间的分数的所有元素。 ``` 127.0.0.1:6379> zrange myzset2 0 -1 withscores 1) "one" 2) "1" 3) "four" 4) "4" 127.0.0.1:6379> zremrangebyscore myzset2 1 2 (integer) 1 127.0.0.1:6379> zrange myzset2 0 -1 withscores 1) "four" 2) "4" ```