Redis概述
Redis(Remote Dictionary Server ),即远程字典服务,是⼀个开源的使⽤ ANSI C 语⾔编写、⽀持⽹络、可基于 内存亦可持久化的⽇志型、Key-Value数据库,并提供多种语⾔的 API。
注:使用Redis时,要打开Linux虚拟机,进入Redis中的src,出现以下画面即可
Redis的分类
redis ⾃身是⼀个 Map ,其中所有的数据都是采⽤ key : value 的形式存储 key 是⼀个字符串, value 是具 有具体类型的数据。 Redis 中包含5种基本数据类型和3种特殊类型。
Redis的常用命令
基本命令
# 1.切换数据库
select index
# 2.清屏命令
clear
# 3.获得当前库中的key
# "*"匹配任意数量的任意字符 "?"匹配任意⼀个字符 "[]"匹配其中的任意⼀个字符
keys pattern
keys * (获得所有的key)
keys d* (获得所有以d开头的key)
keys *blue (获得所有以blue结尾的key)
keys ?ava (获得前⾯有⼀个任意字符,并且以ava结尾的key)
keys u[se]r (获得前⾯第⼀个字符是u,第⼆个字符是s或e,结尾为r的key)
# 4.判断key是否存在
exists key
# 5.判断key是什么类型
type key
# 6.删除指定的key
del key
# 7.设置key的过期时间
expire key 1 (秒为单位)
pexpire key 1 (毫秒为单位)
# 8.查看过期剩余时间(-1表示永不过期,-2表示已过期)
ttl key
# 9.将key的有效期设置为永不过期
persist key字符串相关命令
String 是 Redis 中最基本的类型, String 类型是⼆进制安全的, redis 的 string 可以存储任何数据,如图
⽚、对象等。
# 10.修改key的名字
rename key newkey #如果newkey存在则会替换原来的value
rename str str1 #将str的key改名为str1
renamenx str str1 #将str的key改名为str1,如果str1不存在才修改,如果存在则修改失败
# 11.对key中的数据进⾏排序,只针对集合类型(list,set)
sort key
sort list [asc|desc] #对key为list的集合进⾏排序(注意不改变原始数据)
# 12.查看库中key的数量
dbsize
# 13.清楚当前库的所有key
flushdb
# 14.清楚所有库的所有数据命令
flushall
# 15.退出命令
quit exit ESC键
# 16.检测客户端与服务器连通命令
ping
# 17.控制台打印命令
echo message
# 18.数据在不同的库中移动 move key db
move name 1 #将当前库中的name数据移动到1号库中(注意:当前库中存在name数据,1号库中不存在同名的数据)
# 19.获得当前Redis的运⾏属性值
info
实例:
edis> set A1 aa1
OK
redis> keys A*
1) A1
2) A
redis> KEYS *
1) D
2) A1
3) A
4) C
5) B
redis> EXISTS A
1
redis> exists K
0
redis> TYPE A
string
redis> KEYS A*
1) A1
2) A
redis> EXPIRE A1 99
1
redis> PEXPIRE A1 9999
1
redis> ttl A
-1
redis> ttl A1
-2
redis> PERSIST A1
0
redis> RENAME A1 A2
ERR no such keyredis> RENAME A A2
OK
redis> DBSIZE
4
redis> PING
PONG
redis> ECHO Hello
Hello
redis> INFO
字符串相关命令
String 是 Redis 中最基本的类型, String 类型是⼆进制安全的, redis 的 string 可以存储任何数据,如图 ⽚、对象等。
# 存值命令
set key value # 存放单个元素
mset key1 value1 key2 value2 key3 value3 ... # 批量存放
# 取值命令 获取数据时返回值为nil表示空,没有获取数据
get key # 获取单个元素
mget key1 key2 key3 ... # 批量获取多个元素
# 获得字符串的⻓度
strlen key
# 向value中追加数据(如果原始数据存在就追加,否则新建)
append key value
# 截取字符串 endIndex:-1代表⾃然结束
getrange key startIndex endIndex
# 替换内容
setrange key startIndex 替换内容
# 如果存在就不设置,不存在就新建
setnx key value #如果存在什么都不做,如果不存在就新建⼀个数据
# 数值运算指令
# 加法操作
incr key #对key的值⾃加1,等同于i++
incrby key number #对key的值加上指定的数值(负值进⾏减法运算),等同于i=i+n
# 减法运算
decr key #对key的值⾃减1,等同于i--Hash 相关命令
List 相关命令
在Redis中可以把list⽤作栈、队列、阻塞队列 list中允许存放重复数据 list中存储的数据有序(指进⼊顺序<分左右
>)。
decr by key number #对可以的值减去指定的数值
# 设置带有时效的数据
# 以秒为单位设置存活时间
setex key seconds value
# 以毫秒为单位设置存活时间
psetex key milliseconds value
# 使⽤set⽅式设置key的存活期
set key value [ex seconds][px milliseconds]
实例:
redis> set A aa
OK
redis> set B bb
OK
redis> set C 1
OK
redis> set A aa2
OK
redis> set D 1
OK
redis> get A
aa2
redis> get B
bb
redis> get C
1
redis> get D
1
redis> set E ee
OK
redis> del E
1
redis> MSET E ee F ff G gg H hh
OK
redis> MGET A B C D E F G H I
1) aa2
2) bb
3) 1
4) 1
5) ee
6) ff
7) gg
8) hh
9) NULL
redis> STRLEN A
3
redis> APPEND A abcd
7
redis> get A
aa2abcd
redis> APPEND B bcd
5
redis> get B
bbbcd
redis> GETRANGE A 1 3
a2a
redis> get A
aa2abcd
redis> SETRANGE A 1 9999
7
redis> get A
a9999cd
redis> setnx A aaa
0
redis> setnx I ii
1
redis> get I
ii
redis> set A aaa nx
NULL
redis> set J jj nx
OK
redis> get J
jj
redis> INCR C
2
redis> INCR C
3
redis> INCR C 2
ERR wrong number of arguments for 'incr' commandredis> INCRBY C 3
6
redis> get C
6
redis> DECR C
5
redis> DECRBY C 2
3
redis> DECRBY C 8
-5
redis> del E F J H G I
6
redis> SETEX E 10 ee
OK
redis> set E ee ex 10
OK
redis> psetex E 10000 ee
OK
redis> get E
ee
redis> set E ee px 1000
OK
redis> get E
NULL
redis> set E ee px 10000
OK
redis> get E
ee
redis>
Hash 相关命令
# 添加/修改数据
hset key field value
# 获取数据
hget key field
# 删除数据
hdel key field
# 添加/修改多个数据
hmset key field1 value1 field2 value2 ...
# 获取多个数据
hmget key field1 field2 ...
# 获取hash中的字段数量
hlen key
# 获取hash中是否包含指定字段
hexists key field
# 获取hash中的所有字段名和字段值
hkeys key #获得所有的字段名
hvals key #获得所有字段值
# 设置指定字段的数值增加或减少
hincrby key field number #增加或减少整数(负数为减少)
hincrbyfloat key field number #增加或减少⼩数(负数为减少)
实例:
redis> HSET B a aa
1
redis> KEYS *
1) B
redis> HSET A a aa
1
redis> hset A b bb
1
redis> KEYS *
1) B
2) A
redis> HGET A a
aa
redis> HGET A c
NULL
redis> DEL A
1
redis> KEYS *
1) B
redis> HSET A a aa
1
redis> HSET A b bb
1
redis> hset A c cc
1
redis> DBSIZE
2
redis> del A b
1
redis> KEYS *
1) B
redis> hset A a aa
1
redis> hset A b bb
1
redis> hset A c cc
1
redis> HDEL A b
1
redis> KEYS *
1) B
2) A
redis> hget A a
aa
redis> HGET A b
NULL
redis> HGET A c
cc
redis> hmset A d dd e 11 f ff
OK
redis> HMGET A a b c d e f
1) aa
2) NULL
3) cc
4) dd
5) 11
6) ff
redis> HLEN A
5
redis> HEXISTS A b
0
redis> HEXISTS A c
1
redis> HKEYS A
1) a
2) c
3) d
4) e
5) f
redis> HVALS A
1) aa
2) cc
3) dd
4) 11
5) ff
redis> hset A a aa1
0
redis> HGET A a
aa1
redis> hset A c 7.2
0
redis> HGET A c
7.2
redis> HVALS A
1) aa1
2) 7.2
3) dd
4) 11
5) ff
redis> HINCRBY A e 7
18
redis> HINCRBY A e -3
15
redis> HINCRBYFLOAT A c 1.9
9.1
redis> HINCRBYFLOAT A c -1.4
7.7
List 相关命令
在Redis中可以把list⽤作栈、队列、阻塞队列 list中允许存放重复数据 list中存储的数据有序(指进⼊顺序分左右 >)。
# 向列表中添加数据(左部添加/右部添加)
lpush key value #向队列的头部插⼊元素(左)
lpush list aaa #向队列的头部插⼊⼀个元素
lpush list aaa bbb ccc #向队列中插⼊多个元素
rpush key value #向队列的尾部插⼊元素(右)
rpush list aaa #向队列的尾部插⼊⼀个元素
rpush list aaa bbb ccc #向队列中插⼊多个元素
# 从list中获取元素
lrange key startIndex endIndex #根据起始和结束下标获取此范围内的列表元素
lrange list 0 1 #结果 aaa,bbb
lrange list 0 -1 #将list中的所有元素取出
# 从list中弹出元素
lpop key #获得列表头部的第⼀个元素并从列表中移除Set 相关命令
不保证顺序,集合不能存放重复数据
lpush list aaa bbb ccc ddd
lpop key #获取并移除元素"ddd"
rpop key #获得列表尾部的第⼀个元素并从列表中移除
rpop key #获取并移除元素aaa
# 通过下标获取list中的某个元素
lindex key index
# 获得列表中元素的数量(⻓度)
llen key
# 根据元素值从列表中移除指定数量的元素
lrem key count value
lrem list 2 aaa #将list中的aaa元素移除,存在两个移除两个(最多移除两个)
# 截取⼦list(截断⼦元素)
ltrim key start end
lpush list aaa bbb ccc ddd eee
ltrim list 0 3 结果:eee ddd ccc bbb
# 将原列表中最后⼀个元素移到新列表中
rpoplpush oldkey newkey
lpush list aaa bbb ccc ddd eee
rpoplpush list newlist #将list中的最后⼀个元素移动到newlist中
lrange list #结果 bbb ccc ddd eee
lrange newlist #结果 aaa
# 根据下标重置list中的⼀个元素(根据下标修改list中的⼀个元素)
lset key index value
# 向某个元素前或后插⼊⼀个元素
linsert list before|after oldvalue insertvalue
实例:
redis> LPUSH A aa
1
redis> LPUSH A bb
2
redis> LPUSH A cc
3
redis> LPUSH A dd ee ff
6
redis> rpush A 11 22 33 44 55
11
redis> RPUSH A 66
12
redis> RPUSH A cc
13
redis> LINDEX A 3
cc
redis> LINDEX A 9
44
redis> LINDEX A 99
NULL
redis> LINDEX A 0 -1
ERR wrong number of arguments for 'lindex' commandredis> LRANGE A 0 -11) ff2) ee3) dd4) cc5) bb6) aa7) 118) 229) 33
10) 44
11) 55
12) 66
13) cc
redis> LRANGE A 3 6
1) cc
2) bb
3) aa
4) 11
redis> lrem A 9 aa
1
redis> LRANGE A 0 -11) ff2) ee3) dd4) cc5) bb6) 117) 228) 339) 44
10) 55
11) 66
12) cc
redis> lrem A 2 cc
2
redis> LRANGE A 0 -11) ff2) ee3) dd4) bb5) 116) 227) 338) 449) 55
10) 66
redis> lpop A
ff
redis> LRANGE A 0 -1
1) ee
2) dd
3) bb
4) 11
5) 22
6) 33
7) 44
8) 55
9) 66
redis> llen A
9
redis> LINSERT A Before 3 KK<BEFORE | AFTER> pivot element
ERR wrong number of arguments for 'linsert' commandredis> LINSERT A Before 3 kk
-1
redis> LINSERT A Before 33 kk
10
redis> LINSERT A after bb oo
11
redis> LRANGE A 0 -11) ee2) dd3) bb4) oo5) 116) 227) kk8) 339) 44
10) 55
11) 66
redis> lset A 3 999
OK
redis> lrange A 0 -11) ee2) dd3) bb4) 9995) 116) 227) kk8) 339) 44
10) 55
11) 66
redis> ltrim A 0 4
OK
redis> lrange A 0 -1
1) ee
2) dd
3) bb
4) 999
5) 11
redis> RPOPLPUSH A B
11
redis> lrange A 0 -1
1) ee
2) dd
3) bb
4) 999
redis> lrange B 0 -1
1) 11
redis>
Set 相关命令
不保证顺序,集合不能存放重复数据
# 向set集合添加⼀个元素
sadd key value1 value2 ....
# 查看set集合中的所有元素
smembers key
# 判断⼀个元素是否存在于set集合中(0表示不存在 1表示存在)
sismember key value
# 获取set中元素的个数
scard key
# 移除⼀个元素
srem key value
# 随机抽取⼀个元素
srandmember key [count] #随机抽取⼀个或多个元素
# 随机删除元素
spop key [count] #随机删除⼀个或多个元素
# 将⼀个特定的值,移动到另⼀个set集合中
smove oldkey newkey value
# 集合操作
# 1. 差集
sdiff key1 key2
# 2. 交集
sinter key1 key2ZSet 相关命令
实例:
redis> HSET B a aa
1
redis> KEYS *
1) B
redis> HSET A a aa
1
redis> hset A b bb
1
redis> KEYS *
1) B
2) A
redis> HGET A a
aa
redis> HGET A c
NULL
redis> DEL A
1
redis> KEYS *
1) B
redis> HSET A a aa
1
redis> HSET A b bb
1
redis> hset A c cc
1
redis> DBSIZE
2
redis> del A b
1
redis> KEYS *
1) B
redis> hset A a aa
1
redis> hset A b bb
1
redis> hset A c cc
1
redis> HDEL A b
1
redis> KEYS *
1) B
2) A
redis> hget A a
aa
redis> HGET A b
NULL
redis> HGET A c
cc
redis> hmset A d dd e 11 f ff
OK
redis> HMGET A a b c d e f
1) aa
2) NULL
3) cc
4) dd
5) 11
6) ff
redis> HLEN A
5
redis> HEXISTS A b
0
redis> HEXISTS A c
1
redis> HKEYS A
1) a
2) c
3) d
4) e
5) f
redis> HVALS A
1) aa
2) cc
3) dd
4) 11
5) ff
redis> hset A a aa1
0
redis> HGET A a
aa1
redis> hset A c 7.2
0
redis> HGET A c
7.2
redis> HVALS A
1) aa1
2) 7.2
3) dd
4) 11
5) ff
redis> HINCRBY A e 7
18
redis> HINCRBY A e -3
15
redis> HINCRBYFLOAT A c 1.9
9.1
redis> HINCRBYFLOAT A c -1.4
7.7
redis> FLUSHDB
OK
redis> SADD A aa bb cc dd
4
redis> SADD B bb cc kk oo ll
5
redis> SUNION A B
1) aa
2) bb
3) cc
4) dd
5) kk
6) oo
7) ll
redis> SINTER a b
(empty array)
redis> SINTER A B
1) bb
2) cc
redis> SDIFF A B
1) aa
2) dd
redis> SDIFF B A
1) kk
2) oo
3) ll
redis>
ZSet 相关命令
该集合是对 set 集合的改造,在 set 集合中加⼊了⼀个字段值,⽤于存储排序规则数据,该数据只负责排序不起 其他作⽤。
# 向zset集合添加元素
zadd key score1 value1 score2 value2 #向zset集合添加⼀个或多个成员
# 获取zset中的元素
# 1.zrange key start end [withscores] #从⼩到⼤的顺序显示元素信息,withscores显示排序规则字段
# 2.zrevrange key start end [withscores] #从⼤到⼩的顺序显示元素信息,withscores显示排序规则字段
# 按条件获取zset中的元素
# 1.zrangebyscore key min max [limit] [withscores]
zrangebyscore salary 9000 12000 limit 0 2 withscores #查询⼯资在9000到12000之间的员⼯名并显示前
两个
# 2.zrevrangebyscore key max min [limit] [withscores] #降序
zrevrangebyscore salary 13000 10000 limit 0 2 withscores #查询⼯资在12000到90000之间的员⼯名并
显示前两个
# 增加或减少zset中元素的score值
zincrby key increment value
zincrby topn 200 java #把key为topn的的java属性的score添加200
# 删除zset中的元素
zrem key member1 member2 ... #根据元素名删除⼀个或多个元素
zrem salary xiaoming xiaoqiang
zremrangebyrank key start stop #删除下标指定范围的元素
zremrangebyrank salary 0 2
zremrangebyscore salary min max #根据socres指定范围删除元素
zremrangebyscore salary 9000 12000
# 获取指定值的分数
zscore key value
# 获得元素在集合中的排名
zrank key member # 升序排名
zrank topn java #排名从0开始,根据score升序排序
zrevrank key member # 降序排名
zrevrank topn java #排名从0开始,根据score降序排序
# 获得集合中元素数量
# 1.zcard key #获得集合中元素数量
zcard salary
# 2.zcount key min max #获得指定范围的元素数量
zcount salary 9000 12000
# 集合交集和并集
#1.zinterstore newset setcount set1 set2 ...#集合交集操作,将多个集合的交集存⼊到newset集合中,相
交集合的数量个setcount指定的数量要⼀致,默认对交集数据进⾏求和运算,也可以获得最⼤值或最⼩值等运算
zinterstore ss 2 s1 s2 [aggregate max|min]
#2.zunionstore newset setcount set1 set2 ...#集合并集操作
zunionstore ss 2 s1 s2 [aggregate max|min]
实例:
redis> zadd A 1.7 aa
1
redis> zadd A 1.3 bb
1
redis>
redis> zadd A 1.6 cc
1
redis> zadd A 1.2 dd 1.7ee
ERR syntax errorredis> zadd A 1.2 dd 2.7ee
ERR syntax errorredis> zadd A 1.2 dd 2.7 ee
2
redis> ZRANGE A 0 -1
1) dd
2) bb
3) cc
4) aa
5) ee
redis> ZINCRBY A 0.3 dd
1.5
redis> ZRANGE A 0 -1
1) bb
2) dd
3) cc
4) aa
5) ee
redis> ZINCRBY A -0.2 dd
1.3
redis> ZRANGE A 0 -1
1) bb
2) dd
3) cc
4) aa
5) ee
redis> zrem A dd
1
redis> ZRANGE A 0 -1
1) bb
2) cc
3) aa
4) ee
redis> ZSCORE A ee
2.7
redis> ZCARD A
4
redis> zcount A 1.1 1.7
3
redis> FLUSHDB
OK
redis> zadd A 1.1 aa 1.2 bb 1..3 cc 1.4 dd
ERR value is not a valid floatredis> zadd A 1.1 aa 1.2 bb 1.3 cc 1.4 dd
4
redis> zadd B 2.1 aa 2.5 bb 2.3 kk
3
redis> ZUNION A B
ERR value is not an integer or out of rangeredis> ZUNION A B
ERR value is not an integer or out of rangeredis> ZUNION A B 2
ERR value is not an integer or out of rangeredis> ZUNION 2 A B
1) cc
2) dd
3) kk
4) aa
5) bb
redis> ZINTER 2 A B
1) aa
2) bb