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功能。