1.String
1.1 应用场景
String是最常用的一种数据类型,例如:key/value存储,value可以是String、数字等。
1.2 常用操作
1>set赋值,用法:set key value
2>get赋值,用法:get key
3>incr递增数字,仅仅对key的value为数字类型时使用,相当于java的自增,如i++,用法:incr key
#设置key:add的值为6,incr实行该key的value自增 redis 127.0.0.1:6379> set add 6 OK redis 127.0.0.1:6379> incr add (integer) 7 redis 127.0.0.1:6379> incr add (integer) 8 redis 127.0.0.1:6379> #如果key的value为String类型,出现如下现象 redis 127.0.0.1:6379> set addString 'lxl' OK redis 127.0.0.1:6379> incr addString (error) ERR value is not an integer or out of range redis 127.0.0.1:6379> #很明显报错了,报错信息:vlaue不是一个integer类型
4>incrby 增加指定的数字,仅仅对数字类型的key有用,相当于java的i+=3,用法:incrby key increment,表示key自增increment,increment的值可以为负数,表示减少。
redis 127.0.0.1:6379> set add 15 OK redis 127.0.0.1:6379> incrby add 3 (integer) 18 redis 127.0.0.1:6379> incrby add -5 (integer) 13 redis 127.0.0.1:6379>
5>decr递减数字,同incr递增原理一样
6>decrby减少指定数字,同incrby原理一样
7>append 向尾部追加值,相当于java中的"hello".append("boy"),用法:append key value
redis 127.0.0.1:6379> set ceshi hello OK redis 127.0.0.1:6379> append ceshi world (integer) 10 redis 127.0.0.1:6379> get ceshi "helloworld" redis 127.0.0.1:6379>
8> strlen 获取字符串长度,用法:strlen key
redis 127.0.0.1:6379> get ceshi "helloworld" redis 127.0.0.1:6379> strlen ceshi (integer) 10 redis 127.0.0.1:6379>
9>mset 同时设置多个key的值,用法mset key1 value1 [key2 value2 ……]
redis 127.0.0.1:6379> mset name lxl sex 男 age 29 OK redis 127.0.0.1:6379> get name "lxl" redis 127.0.0.1:6379> get sex "? redis 127.0.0.1:6379> get age "29" redis 127.0.0.1:6379>
10>mget 同时获取多个key的值,用法:mget key1 key2 ……
redis 127.0.0.1:6379> mset name lxl sex 男 age 29 OK redis 127.0.0.1:6379> get name "lxl" redis 127.0.0.1:6379> get sex "? redis 127.0.0.1:6379> get age "29" redis 127.0.0.1:6379> mget name sex age 1) "lxl" 2) "? 3) "29" redis 127.0.0.1:6379>
2.散列
它相当于java中的hashMap,它的值是一个字典,保存很多key/value对。
2.1应用场景:例如,我们需要存储一个用户的信息,该用户包含如下信息:name、sex、age等。
redis的hash提供的存储方案:每个用户都设置一个id,作为key,用户的所有属性用一个hashMp存放,hashMap里面的
每个属性作为key,value为属性值。
2.2常用命令
1>hset赋值,用法:hset key field(字段) value(值)
redis 127.0.0.1:6379> hset userId name 'lxl' (integer) 0 redis 127.0.0.1:6379>
2>hget取值,用法:hget key field
redis 127.0.0.1:6379> hget userId name "lxl" redis 127.0.0.1:6379>
3>hmset 一次性赋值多个字段,用法hmset key field1 value1 [field2 value2 ……]
redis 127.0.0.1:6379> hmset userId name 'lxl' sex 0 age '29' address 成都 OK redis 127.0.0.1:6379>
4>hmget 一次性取多个字段值,用法hmget key filed1 [field2 ……]
redis 127.0.0.1:6379> hmset userId name 'lxl' sex 0 age '29' address 成都 OK redis 127.0.0.1:6379> hmget userId name age 1) "lxl" 2) "29" redis 127.0.0.1:6379>
5>hgetall 一次性取所有字段的值,用法hgetall key
redis 127.0.0.1:6379> hmset userId name 'lxl' sex 0 age '29' address 成都 OK redis 127.0.0.1:6379> hmget userId name age 1) "lxl" 2) "29" redis 127.0.0.1:6379> hgetall userId 1) "name" 2) "lxl" 3) "sex" 4) "0" 5) "age" 6) "29" 7) "address" 8) "砛xc9都" redis 127.0.0.1:6379>
6>hexists 判断字段是否存在,1:存在,0:不存在,实际上可以增加字段,用法:hexists key filed
#很明显看得出来,userId对应的hashMap中存在sex这个字段 redis 127.0.0.1:6379> hexists userId sex (integer) 1 redis 127.0.0.1:6379>
7>hdel 删除一个或多个字段,用法:hdel key field [field2……]
#删除前字段有5个 redis 127.0.0.1:6379> hgetall userId 1) "name" 2) "lxl" 3) "sex" 4) "0" 5) "age" 6) "29" 7) "address" 8) "砛xc9都" 9) "job" 10) "IT" #删除age这个字段 redis 127.0.0.1:6379> hdel userId age (integer) 1 redis 127.0.0.1:6379> hgetall userId 1) "name" 2) "lxl" 3) "sex" 4) "0" 5) "address" 6) "砛xc9都" 7) "job" 8) "IT" redis 127.0.0.1:6379>
8>hkeys 获取hash中所有的字段名,用法hkeys key
redis 127.0.0.1:6379> hkeys userId 1) "name" 2) "sex" 3) "address" 4) "job" redis 127.0.0.1:6379>
9>hvals 获取所有的字段值,用法:hvals key
redis 127.0.0.1:6379> hvals userId 1) "lxl" 2) "0" 3) "砛xc9都" 4) "IT" redis 127.0.0.1:6379>
10>hlen 获取字段数量,用法:hlen key
redis 127.0.0.1:6379> hvals userId 1) "lxl" 2) "0" 3) "砛xc9都" 4) "IT" redis 127.0.0.1:6379> hlen userId (integer) 4 redis 127.0.0.1:6379>
3.列表
redis的列表其实就是一个双向链表,它可以实现遍历、正向(反向)添加(删除)数据。
2.1应用场景:可以实现消息排列等。
2.2常用命令
1>lpush 向列表左端添加元素,用法:lpush key value
redis 127.0.0.1:6379> lpush testList ZhangSan (integer) 1 redis 127.0.0.1:6379> lpush testList LiSi (integer) 2 redis 127.0.0.1:6379>
2>rpush 向列表右端添加元素,用法:rpush key value
redis 127.0.0.1:6379> rpush testList WangWu (integer) 3 redis 127.0.0.1:6379> rpush testList ZhaoLiu (integer) 4 redis 127.0.0.1:6379>
3>lrange 获取列表中某一个片段的值,用法:lrange key start stop,index从0开始,-1表示最后一个元素。
redis 127.0.0.1:6379> lpush testList ZhangSan (integer) 1 redis 127.0.0.1:6379> lpush testList LiSi (integer) 2 redis 127.0.0.1:6379> rpush testList WangWu (integer) 3 redis 127.0.0.1:6379> rpush testList ZhaoLiu (integer) 4 redis 127.0.0.1:6379> lrange testList 0 -1 1) "LiSi" 2) "ZhangSan" 3) "WangWu" 4) "ZhaoLiu" redis 127.0.0.1:6379> #从返回的结果中可以发现 #1.从左到右添加元素ZhangSan、LiSi,所以出现1)是ZhangSan、2)是LiSi的情况; #2.从又到左添加元素WangWu、ZhaoLiu,所以出现3)和4)的情况
4>lpop,从列表左端弹出元素,用法:lpop key
redis 127.0.0.1:6379> lrange testList 0 -1 1) "LiSi" 2) "ZhangSan" 3) "WangWu" 4) "ZhaoLiu" redis 127.0.0.1:6379> lpop testList "LiSi" redis 127.0.0.1:6379>
5>rpop,从列表右端弹出元素,用法:rpop key
redis 127.0.0.1:6379> lrange testList 0 -1 1) "ZhangSan" 2) "WangWu" 3) "ZhaoLiu" redis 127.0.0.1:6379> rpop testList "ZhaoLiu" redis 127.0.0.1:6379>
6>llen,获取列表中元素的个数,用法llen key
redis 127.0.0.1:6379> lrange testList 0 -1 1) "ZhangSan" 2) "WangWu" redis 127.0.0.1:6379> llen testList (integer) 2 redis 127.0.0.1:6379>
7>lrem,删除列表中指定的值,返回值为成功删除指定值的个数,用法:lrem key count value,删除列表中count个value,当count>0时,从左边开始查找;count<0时,从右边开始查;count=0时,删除所有值为value的元素。
#从右到左,删除值为ZhangSan,个数为2 redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "ff" 5) "ZhangSan" 6) "ee" 7) "dd" 8) "cc" 9) "ZhangSan" 10) "WangWu" redis 127.0.0.1:6379> lrem testList -2 ZhangSan (integer) 2 redis 127.0.0.1:6379>
8>lindex,获取指定索引的元素值,index从0开始,用法:lindex key index
redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "ff" 5) "ee" 6) "dd" 7) "cc" 8) "WangWu" redis 127.0.0.1:6379> lindex testList 5 "dd" redis 127.0.0.1:6379>
9>lset,设置指定索引的元素值,用法:lset key index value
#设置第3个值为hello redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "ff" 5) "ee" 6) "dd" 7) "cc" 8) "WangWu" redis 127.0.0.1:6379> lset testList 3 hello OK redis 127.0.0.1:6379> lrange testList 0 -1 1) "jj" 2) "ZhangSan" 3) "hh" 4) "hello" 5) "ee" 6) "dd" 7) "cc" 8) "WangWu" redis 127.0.0.1:6379>
10>ltrim,保留指定片段,用法:ltrim key start stop
redis 127.0.0.1:6379> lrange testList 0 -1 1) "ff" 2) "ee" 3) "dd" 4) "cc" 5) "bb" 6) "aa" 7) "hh" 8) "hello" redis 127.0.0.1:6379> ltrim testList 2 6 OK redis 127.0.0.1:6379> lrange testList 0 -1 1) "dd" 2) "cc" 3) "bb" 4) "aa" 5) "hh" redis 127.0.0.1:6379>
11>linsert,向列表中插入元素,返回list的长度,用法:linsert key before|after privot value,从左边开始寻找值为privot的第一个元素,然后根据条件before|after决定在该元素前面还是后面插入value。
redis 127.0.0.1:6379> lrange testList 0 -1 1) "dd" 2) "cc" 3) "bb" 4) "aa" 5) "hh" redis 127.0.0.1:6379> linsert testList after bb hello (integer) 6 redis 127.0.0.1:6379> lrange testList 0 -1 1) "dd" 2) "cc" 3) "bb" 4) "hello" 5) "aa" 6) "hh" redis 127.0.0.1:6379>
4.集合
集合对外提供的功能与list大致相同,不同之处是set可以自动排除重复元素。
4.1应用场景:当我们需要存储一个列表数据,又不希望出现重复数据时,可以采用set。
4.2常用命令
1>sadd 添加元素,用法:sadd key value1 [value2……]
redis 127.0.0.1:6379> sadd testSet name sex age (integer) 3 redis 127.0.0.1:6379>
2>smembers,获取集合中所有的元素,用法:smembers key
redis 127.0.0.1:6379> sadd testSet name sex age (integer) 3 redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "age" 3) "name" redis 127.0.0.1:6379>
3>srem,删除集合中元素,用法:srem key value1[value2……]
redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "age" 3) "name" redis 127.0.0.1:6379> srem testSet age (integer) 1 redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "name" redis 127.0.0.1:6379>
4>sismember,判断元素是否在集合中,存在返回1;不存在返回0。用法:sismember key value
redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "name" redis 127.0.0.1:6379> sismember testSet name (integer) 1 redis 127.0.0.1:6379>
5>sdiff,对集合做差集运算,用法:sdiff key1 key2 [key3……],先计算key1与key2的差集,然后再用结果与key3做差集。
sinter,对集合做交集运算,用法同sdiff。
sunion,对集合做并集运算,用法同sdiff。
6>scard,获得集合中元素的个数,用法:scard key
redis 127.0.0.1:6379> smembers testSet 1) "sex" 2) "name" redis 127.0.0.1:6379> scard testSet (integer) 2 redis 127.0.0.1:6379>
5.有序集合
与set相比较,sorted set提供了一个优先级(score)的参数来为成员排序,而且插入是有序的,即自动排序。
5.1应用场景:当我们需要一个有序且元素不重复的集合列表,就可以采用sorted set。
5.2常用命令
1>zadd,添加元素,用法:zadd key score1 value1
redis 127.0.0.1:6379> zadd testZset 5 zhangsan (integer) 0 redis 127.0.0.1:6379>
2>zscore,获取元素的分数,用法:zscore key value
redis 127.0.0.1:6379> zadd testZset 5 zhangsan (integer) 0 redis 127.0.0.1:6379> zscore testZset zhangsan "5" redis 127.0.0.1:6379>
如下的就不列举例子了,实际应用中去官网查手册。