Redis是使用c语言开发的一个高性能键值数据库。Redis通过一些键值类型来存储数据。

Redis常用的数据类型有以下几种:

一、string

1、get、set、del

set key value :设置key的值 value

get key :获取key的值

del key :删除key

127.0.0.1:6379> clear
127.0.0.1:6379> set book java
OK
127.0.0.1:6379> get book
"java"
127.0.0.1:6379> del book
(integer) 1
127.0.0.1:6379> get book
(nil)

2、incr、decr、incrby、decrby

incr key :key自增1,如果key不存在,自增后get key = 1

decr key :key自减1,如果key不存在,自减后get key = -1

incrby key i:key自增i,如果key不存在,自增后get key = i

decrby key i:key自减i,如果key不存在,自减后get key = -i

127.0.0.1:6379> get number
(nil)
127.0.0.1:6379> incr number
(integer) 1
127.0.0.1:6379> get number
"1"
127.0.0.1:6379> incrby number 2
(integer) 3
127.0.0.1:6379> get number
"3"
127.0.0.1:6379>

3、set、setnx、setxx

set key value :不管key是否存在,都设置值

setnx key value :key不存在,设置值

set key value xx :key存在,设置值

127.0.0.1:6379> set java javase
OK
127.0.0.1:6379> setnx java javaee
(integer) 0
127.0.0.1:6379> set java javame xx
OK
127.0.0.1:6379> get java
"javame"

4、mset、mget

mset key1 value1 key2 value2:批量设置key

mget key1 key2:批量获取key

127.0.0.1:6379> mset book1 java book2 jvm book3 spring
OK
127.0.0.1:6379> mget book1 book2 book3
1) "java"
2) "jvm"
3) "spring"

5、getset、append、strlen

getset key newValue:将新值赋给key并返回旧值

append key value:将value追加到key对应的value值后面

strlen key:返回字符串长度

127.0.0.1:6379> get book
"java"
127.0.0.1:6379> getset book spring
"java"
127.0.0.1:6379> append book cloud
(integer) 11
127.0.0.1:6379> get book
"springcloud"
127.0.0.1:6379> strlen book
(integer) 11

6、setrange、getrange

setrange key index value:设置指定key下标所有对应的值

getrange key start end:获取指定key下标所有对应的值

127.0.0.1:6379> get book
"springcloud"
127.0.0.1:6379> getrange book 6 11
"cloud"
127.0.0.1:6379> setrange book 6 boot
(integer) 11
127.0.0.1:6379> get book
"springbootd"

二、hash

key filed value

1、hset、hget、hdel、hgetall

hset key field value :设置hash key对应field的value值

hget key field :获取hash key对应field的value值

hdel key field :删除hash key对应field的value值

hgetall key :获取hash key所有field和value

127.0.0.1:6379> hset user name java
(integer) 1
127.0.0.1:6379> hset user age 19
(integer) 1
127.0.0.1:6379> hget user name
"java"
127.0.0.1:6379> hgetall user
1) "name"
2) "java"
3) "age"
4) "19"
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "java"
127.0.0.1:6379>

 2、hmset、hmget

hmset key field1 value1 field2 value2 :批量设置hash ky的field value

hmget key field1 field2 ::批量获取hash ky的field

127.0.0.1:6379> hmset user age 19 tel 19919991999
OK
127.0.0.1:6379> hmget user name age tel
1) "java"
2) "19"
3) "19919991999"

3、hvals、hkeys

hvals key :返回hash key对应所有field的value

hkeys key :返回hash key对应所有field

127.0.0.1:6379> hvals user
1) "java"
2) "19"
3) "19919991999"
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
3) "tel"

4、hexists、hlen

hexists key field :判断hash key是否有filed

hlen key :获取hash key field的数量

127.0.0.1:6379> hexists user name
(integer) 1
127.0.0.1:6379> hexists user age
(integer) 0
127.0.0.1:6379> hlen user
(integer) 1

5、hsetnx、hincrby

hsetnx key field value :设置hash key对应的field的value,如果不存在,设置value,返回1,如果已经存在,返回0。

hincrby key field i:hash key对应的field的value自增i

127.0.0.1:6379> hsetnx user age 19
(integer) 0
127.0.0.1:6379> hsetnx user address beijing
(integer) 1
127.0.0.1:6379> hincrby user age 1
(integer) 20

三、list

有序、可以重复、左右两边插入弹出

1、lpush、rpush

lpush key value1 value2 value3 ... :从列表左边插入值value1 value2 value3

rpush key value1 value2 value3 ... :从列表右边插入值value1 value2 value3

127.0.0.1:6379> lpush num 1 2 3 4 5
(integer) 5
127.0.0.1:6379> rpush num 9
(integer) 6
127.0.0.1:6379> lrange num 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "9"

2、linsert

linsert key before|after value newValue :在list指定值的前 | 后插入newValue

127.0.0.1:6379> linsert num before 9 6
(integer) 7
127.0.0.1:6379> lrange num 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "6"
7) "9"

3、lpop、rpop

lpop key :从list左边弹出一个值

rpop key :从list右边弹出一个值

127.0.0.1:6379> lrange num 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "6"
7) "9"
127.0.0.1:6379> lpop num
"5"
127.0.0.1:6379> rpop num
"9"

4、lrem

lrem key count value :根据count值,从list中删除所有值和value相等的元素

(1). count>0,从左到右,删除list中count个和value相等的元素

(2). count<0,从右到左,删除list中count个和value相等的元素

(3). count=0,删除list中所有value相等的元素

127.0.0.1:6379> lrange num 0 -1
1) "3"
2) "1"
3) "4"
4) "3"
5) "2"
6) "1"
7) "6"
8) "1"
9) "3"
127.0.0.1:6379> lrem num 2 3
(integer) 2
127.0.0.1:6379> lrange num 0 -1
1) "1"
2) "4"
3) "2"
4) "1"
5) "6"
6) "1"
7) "3"

5、ltrim、lrange、lindex

ltrim key start end :从list中截取start到end的元素

lrangekey start end :获取list指定范围的元素(索引从0开始,-1代表最后边的一个元素。)

lindex key index :获取list指定索引的元素

127.0.0.1:6379> lrange num 0 -1
1) "1"
2) "4"
3) "2"
4) "1"
5) "6"
6) "1"
7) "3"
127.0.0.1:6379> ltrim num 2 5
OK
127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
3) "6"
4) "1"
127.0.0.1:6379> lindex num 3
"1"

6、llen

llen key :获取list长度

127.0.0.1:6379> llen num
(integer) 4

7、lset

lset key index newValue :设置list指定索引位置值为newValue.

127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
3) "6"
4) "1"
127.0.0.1:6379> lset num 3 9
OK
127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
3) "6"
4) "9"

四、set

1、sadd、srem

sadd key value :向集合key中添加元素,如果集合中存在,添加失败

srem key value :将集合key中value元素移除

127.0.0.1:6379> sadd setnum 1 3 5
(integer) 3
127.0.0.1:6379> sadd setnum 1
(integer) 0

2、scard、spop、sismember、srandmember、smembers

scard key :计算集合大小

sismember key value:判断value是否在集合中

srandmember key count:从集合中随机选择count个元素

smembers key :获取集合所有元素

spop key :从集合中随机弹出一个元素

127.0.0.1:6379> scard setnum
(integer) 3
127.0.0.1:6379> sismember setnum 3
(integer) 1
127.0.0.1:6379> sismember setnum 2
(integer) 0
127.0.0.1:6379> srandmember setnum
"1"
127.0.0.1:6379> spop setnum
"1"

3、sdiff、sinter、sunion

sdiff key1 key2 :key1 key2 差集

sinter key1 key2 :key1 key2 交集

sunion key1 key2 :key1 key2 并集

127.0.0.1:6379> sadd set1 ab cd ef 
(integer) 3
127.0.0.1:6379> sadd set2 cd ef gh 
(integer) 3
127.0.0.1:6379> sdiff set1 set2
1) "ab"
127.0.0.1:6379> sinter set1 set2
1) "ef"
2) "cd"
127.0.0.1:6379> sunion set1 set2
1) "ab"
2) "cd"
3) "ef"
4) "gh"

五、zset

1、zadd、zrem、zcard

zadd key score value :设置key的分数和值

zrem key value1 value2 :删除key集合里面的值

zcard key :返回元素个数

127.0.0.1:6379> zadd rank 90 java
(integer) 1
127.0.0.1:6379> zadd rank 96 spring
(integer) 1
127.0.0.1:6379> zadd rank 80 jvm
(integer) 1
127.0.0.1:6379> zadd rank 86 mysql
(integer) 1
127.0.0.1:6379> zcard rank
(integer) 4
127.0.0.1:6379> zrem rank jvm mysql
(integer) 2

2、zscore、zincrby

zscore key value :获取key中value的分数

zincrby key int value :增加或减少value的分数

127.0.0.1:6379> zscore rank java
"90"
127.0.0.1:6379> zincrby rank 6 java
"96"
127.0.0.1:6379> zincrby rank -3 java
"93"

3、zrange、zrangebyscore、zcount

zrange key start end :获取指定范围内的升序元素[分值]

zrangebyscore key min max :获取指定范围内的升序元素[分值]

zcount key min max :获取指定分数范围内的元素的个数[分值]

127.0.0.1:6379> zrange rank 0 -1
1) "mysql"
2) "redis"
3) "jvm"
4) "java"
5) "spring"
127.0.0.1:6379> zrange rank 0 3
1) "mysql"
2) "redis"
3) "jvm"
4) "java"
127.0.0.1:6379> zrange rank 0 -1 withscores
 1) "mysql"
 2) "86"
 3) "redis"
 4) "86"
 5) "jvm"
 6) "89"
 7) "java"
 8) "93"
 9) "spring"
10) "96"
127.0.0.1:6379> zrangebyscore rank 90 100
1) "java"
2) "spring"
127.0.0.1:6379> zcount rank 90 100
(integer) 2

4、zremrangebyrank、zremrangebyscore

zremrangebyrank key start end :删除指定排名范围内的元素

zremrangebyrank key start end :删除指定分数范围内的元素

127.0.0.1:6379> zrange rank 0 -1
1) "mysql"
2) "redis"
3) "jvm"
4) "java"
5) "spring"
127.0.0.1:6379> zremrangebyrank rank 0 2
(integer) 3
127.0.0.1:6379> zrange rank 0 -1
1) "java"
2) "spring"
127.0.0.1:6379> zremrangebyscore rank 95 100
(integer) 1
127.0.0.1:6379> zrange rank 0 -1
1) "java"

5、zrevrank、zrevrange、zrevrangebyscore

zrevrank key member :返回集合中指定元素的排名,其中有序集成员按 score 值递减(从大到小)排序,score 值最大的成员排名为 0 。

zrevrange key start stop [WITHSCORES]

返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列。

zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。

具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列。

127.0.0.1:6379> zrange rank1 0 -1 withscores
1) "mysql"
2) "86"
3) "spring"
4) "92"
5) "java"
6) "99"
127.0.0.1:6379> zrevrange rank1 0 -1
1) "java"
2) "spring"
3) "mysql"
127.0.0.1:6379> zrevrangebyscore rank1 95 90
1) "spring"
127.0.0.1:6379> zrevrank rank1 spring
(integer) 1
127.0.0.1:6379> zrevrank rank1 java
(integer) 0

6、zinterstore

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
127.0.0.1:6379> zinterstore newset 2 zset1 zset2
(integer) 2
127.0.0.1:6379> zrange newset 0 -1 withscores
1) "one"
2) "2"
3) "two"
4) "4"

7、zunionstore

zunionstore:

计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和 。

WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。

如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

127.0.0.1:6379> zrange zset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379> zrange zset2 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "four"
8) "4"
127.0.0.1:6379> zunionstore newset 2 zset1 zset2 weights 1 3
(integer) 4
127.0.0.1:6379> zrange newset 0 -1 withscores
1) "one"
2) "4"
3) "two"
4) "8"
5) "three"
6) "9"
7) "four"
8) "12"

六、五种数据类型的应用场景

string:应用场景有计数器、缓存、分布式锁。例如,统计在线人数。

hash:存放键值对,一般可以用来存某个对象的基本属性信息,例如,用户信息,商品信息等。

list:列表类型,可以用于实现消息队列,也可以使用它提供的range命令,做分页查询功能。

set:可以用作某些去重功能,例如用户名不能重复、添加标签等,另外,还可以对集合进行交集,差集、并集操作,来实现共同关注,共同好友等功能。

zset:有序集合,可以使用范围查找,实现排行榜或者topN功能。