
set:存数据
格式:
SET key value
示例:
WindowsServer:0>set name zhangsan
"OK"
WindowsServer:0>
get:取数据
格式:
GET key
示例:
WindowsServer:0>get name
"zhangsan"
WindowsServer:0>
del:删除数据
格式:
DEL key [key ...]
示例:
WindowsServer:0>del name
"1"
WindowsServer:0>
mset:一次性存储多个key
格式:
MSET key value [key value ...]
语法:
WindowsServer:0>mset a zhangsan b lisi c wangwu
"OK"
WindowsServer:0>
mget:一次性取多个key
格式:
MGET key [key ...]
语法:
WindowsServer:0>mget a b c
1) "zhangsan"
2) "lisi"
3) "wangwu"
WindowsServer:0>
strlen:获取字符个数
格式:
STRLEN key
语法:
WindowsServer:0>strlen a
"8"
WindowsServer:0>
append:追加字符串(如果没有则新增)
格式:
APPEND key value
语法:
WindowsServer:0>append a 88
"10"
WindowsServer:0>
setnx:存入key,如果这个key存在则返回0(false),代表存入失败,如果不存在则返回1(true),代表存入成功;
格式:
setnx key value
语法:
WindowsServer:0>setnx flag 0
"1"
WindowsServer:0>setnx flag 0
"0"
WindowsServer:0>
自增:
语法:
incr key
格式:
WindowsServer:0>set num 10
"OK"
WindowsServer:0>incr num
"11"
WindowsServer:0>
控制步长自增:
语法:
incrby key increment
格式:
WindowsServer:0>incrby num 10
"21"
WindowsServer:0>
float类型自增:
格式:
incrbyfloat key increment # 自增小数
语法:
WindowsServer:0>set num2 0.5
"OK"
WindowsServer:0>incrbyfloat num2 0.5
"1"
WindowsServer:0>incrbyfloat num2 0.5
"1.5"
WindowsServer:0>
自减
语法:
decr key
示例:
WindowsServer:0>set num 10
"OK"
WindowsServer:0>decr num
"9"
WindowsServer:0>decr num
"8"
WindowsServer:0>
控制步长自减:
语法:
decrby key increment
示例:
decrby a 10
setex key seconds value # 秒
psetex key milliseconds value # 毫秒
WindowsServer:0>setex name 5 zhangsan
"OK"
WindowsServer:0>psetex name 5000 zhangsan
"OK"
WindowsServer:0>

hash类型的数据结构,底层采用hash表存储。
hset:添加/修改数据
格式:
HSET key field value
示例:
WindowsServer:0>hset user username zs
"1"
WindowsServer:0>hset user password admin
"1"
WindowsServer:0>
hegt:添加/修改数据
格式:
HGET key field
示例:
WindowsServer:0>hget user username
"zs"
WindowsServer:0>
hdel:删除数据
格式:
HDEL key field [field ...]
示例:
WindowsServer:0>hdel user password
"1"
WindowsServer:0>
hmset:一次性添加/修改多个字段
格式:
HMSET key field value [field value ...]
示例:
WindowsServer:0>hmset user username zs password admin age 20
"OK"
WindowsServer:0>
hmget:一次性取多个数据
格式:
HMGET key field [field ...]
示例:
WindowsServer:0>hmget user username password age
1) "zs"
2) "admin"
3) "20"
WindowsServer:0>
获取指定key的field的数量
格式:
HLEN key
示例:
WindowsServer:0>hlen user
"3"
WindowsServer:0>
hexists:判断指定的key中是否包含有指定的field(返回1[有]或0[没有])
格式:
HEXISTS key field
示例:
WindowsServer:0>hexists user username
"1"
WindowsServer:0>hexists user xxx
"0"
WindowsServer:0>
hkeys:获取key中所有的field
格式:
HKEYS key
示例:
WindowsServer:0>hkeys user
1) "username"
2) "password"
3) "age"
WindowsServer:0>
hvals:获取key中所有的value
格式:
HVALS key
示例:
WindowsServer:0>hvals user
1) "zs"
2) "admin"
3) "20"
WindowsServer:0>
hgetall:获取指定key中所有的field以及value值
格式:
HGETALL key
示例:
WindowsServer:0>hgetall user
1) "username"
2) "zs"
3) "password"
4) "admin"
5) "age"
6) "20"
WindowsServer:0>
hsetnx:如果指定key中有对应的field则返回0(false),如果没有则存对应的值进去
格式:
HSETNX key field value
示例:
WindowsServer:0>hsetnx user flag 1
"1"
WindowsServer:0>hsetnx user flag 1
"0"
WindowsServer:0>
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。Redis中的list类型采用的是双向链表。
Redis存储结构如下:

添加/修改数据
格式:
LPUSH key value [value ...] # 添加到队列左侧
RPUSH key value [value ...] # 添加到队列右侧
示例:
WindowsServer:0>lpush fruits apple pear
"2"
WindowsServer:0>rpush fruits banana tomato
"4"
WindowsServer:0>
fruits链表的变化如下:

获取数据
格式:
LRANGE key start stop # 从左边开始读取数据,从start索引查询到stop索引
示例:
WindowsServer:0>lrange fruits 0 3 # 从0开始查询到3索引
1) "pear"
2) "apple"
3) "banana"
4) "tomato"
WindowsServer:0>lrange fruits 0 -2 # 从0开始查询到-2索引
1) "pear"
2) "apple"
3) "banana"
WindowsServer:0>lrange fruits 0 -1 # 从0开始查询到-1索引(倒数第二),通常用此命令来查询全部数据
1) "pear"
2) "apple"
3) "banana"
4) "tomato"
WindowsServer:0>
根据指定的索引查询(从0开始)
格式:
LINDEX key index
示例:
WindowsServer:0>lindex fruits 3
"tomato"
WindowsServer:0>lindex fruits -1
"tomato"
Tips:lindex不支持反向查询(没有rindex)
获取并移除数据
格式:
LPOP key # 从队列左边移除一个元素并返回
RPOP key # 从队列右边移除一个元素并返回
示例:
WindowsServer:0>lpop fruits
"pear"
WindowsServer:0>rpop fruits
"tomato"
WindowsServer:0>
规定时间内获取并移除数据
格式:
BLPOP key [key ...] timeout # 在timeout时间内取出key中的值
BRPOP key [key ...] timeout
示例:
WindowsServer:0>blpop fruits 3
1) "fruits"
2) "apple"
WindowsServer:0>blpop fruits 3
1) "fruits"
2) "banana"
WindowsServer:0>blpop fruits 3 # 3秒内取出fruits中的值并删除,如果没取到则一直处于等待状态
WindowsServer:0>
规定时间内移除list右边的一个元素到另一个list的左边,并将此元素返回
格式:
BRPOPLPUSH source destination timeout
示例:
WindowsServer:0>flushdb # 清空数据库
"OK"
WindowsServer:0>lpush fruits apple
"1"
WindowsServer:0>lpush fruits pear
"2"
WindowsServer:0>brpoplpush fruits temp 3
"apple"
WindowsServer:0>lrange temp 0 -1
1) "apple"
WindowsServer:0>brpoplpush fruits temp 3
"pear"
WindowsServer:0>lrange temp 0 -1
1) "pear"
2) "apple"
WindowsServer:0>lrange fruits 0 -1 # fruits链表中已经没有了数据
WindowsServer:0>
移除指定数据
格式:
LREM key count value # 从list左边开始移除元素
示例:
WindowsServer:0>rpush data a b c d e a b c k o
"10"
WindowsServer:0>lrange data 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "a"
7) "b"
8) "c"
9) "k"
10) "o"
WindowsServer:0>lrem data 2 a
"2"
WindowsServer:0>lrange data 0 -1
1) "b"
2) "c"
3) "d"
4) "e"
5) "b"
6) "c"
7) "k"
8) "o"
WindowsServer:0>
在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间是常量时间。Set可包含的最大元素数是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如sinter、sdiff、sunion等操作。由于这些操作均在服务端完成, 因此效率极高,而且也节省了大量的网络IO开销
添加数据
格式:
sadd key member [member ...]
示例:
WindowsServer:0>sadd cities changsha wuhan nanchang hefei hangzhou fuzhou
"6"
WindowsServer:0>
读取全部数据
格式:
smembers key
示例:
WindowsServer:0>smembers cities
1) "nanchang"
2) "wuhan"
3) "changsha"
4) "hefei"
5) "hangzhou"
6) "fuzhou"
WindowsServer:0>
set存取无序;
删除数据
格式:
srem key member [member ...]
示例:
WindowsServer:0>srem cities fuzhou hangzhou
"2"
WindowsServer:0>smembers cities
1) "changsha"
2) "nanchang"
3) "hefei"
4) "wuhan"
WindowsServer:0>
获取集合中元素的个数
格式:
scard key
示例:
WindowsServer:0>scard cities
"4"
WindowsServer:0>
判断集合中是否包含指定的数据
格式:
sismember key member
示例:
WindowsServer:0>sismember cities nanchang
"1"
WindowsServer:0>
移动集合中的指定元素到另一个集合
格式:
smove source destination member
示例:
WindowsServer:0>sadd fruits1 apple pear
"2"
WindowsServer:0>sadd fruits2 banana tomato
"2"
WindowsServer:0>smove fruits1 fruits2 apple
(integer) 1
WindowsServer:0>smembers fruits1
1) "pear"
WindowsServer:0>smembers fruits2
1) "apple"
2) "banana"
3) "tomato"
在指定的key中随机获取几个值
格式:
srandmember key [count]
示例:
WindowsServer:0>srandmember cities 2
1) "hefei"
2) "changsha"
WindowsServer:0>
在指定的key中随机获取几个值,并将这几个值移除
格式:
SPOP key [count]
count默认为1
示例:
WindowsServer:0>spop cities
"hefei"
WindowsServer:0>smembers cities
1) "changsha"
2) "nanchang"
3) "wuhan"
WindowsServer:0>spop cities 2
1) "changsha"
2) "wuhan"
WindowsServer:0>smembers cities
1) "nanchang"
WindowsServer:0>

取两个集合的交集:
格式:
sinter key [key ...] # 交集
示例:
WindowsServer:0>sadd cities1 lanzhou guangzhou fuzhou hangzhou zhengzhou
"5"
WindowsServer:0>sadd cities2 meizhou guangzhou quanzhou fuzhou ganzhou
"5"
WindowsServer:0>sinter cities1 cities2
1) "guangzhou"
2) "fuzhou"
WindowsServer:0>
取两个集合的差集:
格式:
sdiff key [key ...] # 差集
示例:
WindowsServer:0>sdiff cities1 cities2
1) "zhenghzhou"
2) "hangzhou"
3) "lanzhou"
WindowsServer:0>
取两个集合的并集:
格式:
sunion key [key ...] # 并集
示例:
WindowsServer:0>sunion cities1 cities2
1) "quanzhou"
2) "meizhou"
3) "zhenghzhou"
4) "lanzhou"
5) "guangzhou"
6) "hangzhou"
7) "fuzhou"
8) "ganzhou"
WindowsServer:0>
获取两个集合的交、差、并集存储到指定集合中
格式:
sinterstore destination key1 [key2] # 交集
sdiffstore destination key1 [key2] # 差集
sunionstore destination key1 [key2] # 并集
sinterstore-案例:
WindowsServer:0>sinterstore sinter_temp cities1 cities2
"2"
WindowsServer:0>smembers sinter_temp
1) "guangzhou"
2) "fuzhou"
WindowsServer:0>
sdiffstore-案例:
WindowsServer:0>sdiffstore sdiff_temp cities1 cities2
"3"
WindowsServer:0>smembers sdiff_temp
1) "zhenghzhou"
2) "hangzhou"
3) "lanzhou"
WindowsServer:0>
sunionstore-案例:
WindowsServer:0>sunionstore sunion_temp cities1 cities2
"8"
WindowsServer:0>smembers sunion_temp
1) "quanzhou"
2) "meizhou"
3) "zhenghzhou"
4) "lanzhou"
5) "guangzhou"
6) "hangzhou"
7) "fuzhou"
8) "ganzhou"
WindowsServer:0>
Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现,在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score) 却是可以重复的。
添加数据
格式:
zadd key score1 member1 [score2 member2]
示例:
WindowsServer:0>zadd students 90 xiaohui 80 xiaolan 85 xiaoming
"3"
WindowsServer:0>
读取数据
格式:
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
start:起始索引stop:终止索引withscores:是否显示分值zrevrange:将查询结果反转示例:
WindowsServer:0>zrange students 0 0
1) "xiaolan"
WindowsServer:0>zrange students 0 1
1) "xiaolan"
2) "xiaoming"
WindowsServer:0>zrange students 0 2
1) "xiaolan"
2) "xiaoming"
3) "xiaohui"
WindowsServer:0>zrange students 0 -1
1) "xiaolan"
2) "xiaoming"
3) "xiaohui"
WindowsServer:0>zrange students 0 -1 withscores # 默认正序排序
1) "xiaolan"
2) "80"
3) "xiaoming"
4) "85"
5) "xiaohui"
6) "90"
WindowsServer:0>zrevrange students 0 -1 withscores # 倒序排序
1) "xiaohui"
2) "90"
3) "xiaoming"
4) "85"
5) "xiaolan"
6) "80"
WindowsServer:0>
根据分值筛选
格式:
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
示例:
WindowsServer:0>zrangebyscore students 80 85
1) "xiaolan"
2) "xiaoming"
WindowsServer:0>zrangebyscore students 80 85 withscores
1) "xiaolan"
2) "80"
3) "xiaoming"
4) "85"
WindowsServer:0>zrangebyscore students 80 85 withscores limit 0 2
1) "xiaolan"
2) "80"
3) "xiaoming"
4) "85"
WindowsServer:0>
zrevrangebyscore:根据分值反转查询
WindowsServer:0>zrevrangebyscore students 100 0
1) "xiaohui"
2) "xiaoming"
3) "xiaolan"
WindowsServer:0>zrevrangebyscore students 100 0 withscores
1) "xiaohui"
2) "90"
3) "xiaoming"
4) "85"
5) "xiaolan"
6) "80"
WindowsServer:0>zrevrangebyscore students 100 0 withscores limit 0 2
1) "xiaohui"
2) "90"
3) "xiaoming"
4) "85"
WindowsServer:0>
根据分值范围查询集合总数量
格式:
zcount key min max
示例:
WindowsServer:0>zcount students 80 85
"2"
WindowsServer:0>
取多个集合中的交集、并集
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
交集示例:
WindowsServer:0>zadd fruits1 100 apple 80 pear 70 banana
"3"
WindowsServer:0>zadd fruits2 50 apple 60 tomato 70 banana
"3"
WindowsServer:0>zinterstore zinter_temp 2 fruits1 fruits2
"2"
WindowsServer:0>zrange zinter_temp 0 -1
1) "banana"
2) "apple"
WindowsServer:0>zrange zinter_temp 0 -1 withscores
1) "banana"
2) "140"
3) "apple"
4) "150"
WindowsServer:0>
Tips:zinterstore首先取交集,然后把分数累加。
并集示例:
WindowsServer:0>zunionstore zunion_temp 2 fruits1 fruits2
"4"
WindowsServer:0>zrange zunion_temp 0 -1 withscores
1) "tomato"
2) "60"
3) "pear"
4) "80"
5) "banana"
6) "140"
7) "apple"
8) "150"
WindowsServer:0>
Tips:zunionstore首先取并集,然后把分数累加。
redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”abc”的简单字符串到一个JPEG文件的内容都可以。Redis建议使用字符串做为key的类型
注意:空字符串也是有效key值。
key取值规范
取值举例:
将如下数据库表中的数据,转换为redis的key-value存储
| id | username | password | |
|---|---|---|---|
| 1 | lisi | 111111 | lisi@163.com |
建议格式:
obj名:id:id值
127.0.0.1:6379> set user:id:1:username lisi
OK
127.0.0.1:6379> set user:id:1:password 111111
OK
127.0.0.1:6379> set user:id:1:email lisi@163.com
OK
127.0.0.1:6379> keys user:id:1* # 查找有几个属性
1) "user:id:1:password"
2) "user:id:1:username"
3) "user:id:1:email"
127.0.0.1:6379>
del key
exists key
type key
rename key newkey
expire key seconds
pexpire key milliseconds
ttl key # 返回key的有效时间,单位秒
pttl key # 返回key的有效时间,单位毫秒
如果key没有设置有效期(永久存在),返回-1
如果key不存在返回-2
如果key存在返回key的有效时间
persist key
keys pattern
查询匹配规则:
*:匹配任意数量的任意符号?:匹配任意一个符号[]:匹配一个指定符号keys * 查询所有
keys java* 查询所有以java开头
keys *java 查询所有以java结尾
keys ??java 查询所有前面两个字符任意,后面以java结尾
keys user:? 查询所有以user:开头,最后一个字符任意
keys j[av]a 查询所有以j开头,以a结尾,中间包含一个字母,a或v
list、set、sorted-set)SORT key [BY pattern] [LIMIT offset count] [ASC|DESC] [ALPHA] [STORE destination]
WindowsServer:0>lpush list 22 33 11 44 88 77 55
"7"
WindowsServer:0>sort list
1) "11"
2) "22"
3) "33"
4) "44"
5) "55"
6) "77"
7) "88"
WindowsServer:0>sort list desc
1) "88"
2) "77"
3) "55"
4) "44"
5) "33"
6) "22"
7) "11"
WindowsServer:0>
WindowsServer:0>sadd set 22 33 11 44 88 77 55
"7"
WindowsServer:0>sort set
1) "11"
2) "22"
3) "33"
4) "44"
5) "55"
6) "77"
7) "88"
WindowsServer:0>sort set desc
1) "88"
2) "77"
3) "55"
4) "44"
5) "33"
6) "22"
7) "11"
WindowsServer:0>
WindowsServer:0>sort zset_key alpha # zset排序需要加上alpha参数
1) "apple"
2) "pear"
3) "tomato"
WindowsServer:0>sort zset_key alpha desc
1) "tomato"
2) "pear"
3) "apple"
WindowsServer:0>
在一个redis中会有16个数据库,分别为db0、db1、db2…
select num
select 0 # 切换到0数据库
select 1 # 切换到1数据库
dbsize # 查看当前数据库共有多少个key
flushdb # 清除当前数据库的所有数据
flushall # 清除所有数据库的所有数据