1.在docker中启动redis
1.查看docker中的镜像
docker images
2.运行镜像
docker run -itd --name redis -p 6379:6379 redis
3.查看正在运行的容器
docker ps
运行示例
//TODO 启动详细命令
2.连接Redis
docker exec -ti d82cd7f15583 redis-cli -h localhost -p 6379
ps:d82c... 为redis的id号,通过docker ps可查看运行的容器信息,其中包括id号
运行示例
//TODO 远程连接redis
3.Redis的五大数据类型
Redis中支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型,但在redis中都是以key-value键值对形式保存,通过对key的操作完成对数据的操作
String 字符串
set key value设置字符串
get key获取字符串
append key value 在字符串后追加
localhost:6379> keys * #查看所有key
(empty array)
localhost:6379> set msg hello #添加key
OK
localhost:6379> get msg #查看key
"hello"
localhost:6379> append msg "Redis" #在msg后添加内容
(integer) 10
localhost:6379> get msg
"helloRedis"
localhost:6379>
DECR / INCR key 对value自增或自减 只针对value为数字
localhost:6379> set age 22
OK
localhost:6379> incr age
(integer) 23
localhost:6379> decr age
(integer) 22
incrby / decrby key n设置自增步长
localhost:6379> incrby age 3
(integer) 25
localhost:6379> decrby age 10
(integer) 15
incrbyfloat key floatN自增float类型
localhost:6379> incrbyfloat age 1.2
"16.2"
strlen key获取长度
localhost:6379> strlen msg
(integer) 10
localhost:6379> get msg
"helloRedis"
getrange key start end 获取指定位置的字符串[从0开始计数,为闭区间]
localhost:6379> getrange msg 5 9
"Redis"
setrange key start value 从指定位置开始替换字符串[start 为起始位置,value为替换的字符串]
localhost:6379> setrange msg 5 RangeRedis
(integer) 15
localhost:6379> get msg
"helloRangeRedis"
getset key value 设置新值,返回旧值
localhost:6379> getset msg Redis
"helloRangeRedis"
localhost:6379> get msg
"Redis"
setnx key value 当key存在时进行设置,当key不存在时不设置
localhost:6379> setnx msg test
(integer) 0
localhost:6379> get msg
"Redis"
localhost:6379> setnx name sakura
(integer) 1
localhost:6379> get name
"sakura"
setex key n value 创建key时设置过期时间
localhost:6379> setex name 10 root
OK
localhost:6379> get name
"root"
localhost:6379> ttl name
(integer) -2
localhost:6379> get name
(nil)
expire key n 可以先创建key,在设置过期时间
localhost:6379> expire name 15
(integer) 1
localhost:6379> ttl name
(integer) 12
localhost:6379> get name
"sakura"
localhost:6379> ttl name
(integer) -2
localhost:6379> get name
(nil)
mset key value [key value...]批量设置key value
localhost:6379> mset k1 v1 k2 v2 k3 v3
OK
localhost:6379> get k1
"v1"
localhost:6379> get k2
"v2"
msetnx k1 v1 [ k2 v2]批量添加,当key不存在时才添加成功
localhost:6379> msetnx k1 v1 k4 v4
(integer) 0
localhost:6379> get k4
(nil)
mget key [key2 key3...] 批量获取
localhost:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
List 列表
一个列表最多可以存储超过40亿个元素,可以在其头部和尾部进行插入,这样可以将其作为队列、栈、双端队列等等
LIST是一个链表,所以在两端操作效率最高,在中间操作效率低
因为可以在两端进行操作,所以命令一般分为LXXX和RXXX两种
LPUSH/RPUSH list value 从左边/右边向列表中PUSH值(一个或者多个)
localhost:6379> lpush list k1
(integer) 1
localhost:6379> lrange list 0 -1
1) "k1"
localhost:6379> rpush list k2
(integer) 2
localhost:6379> lrange list 0 -1
1) "k1"
2) "k2"
localhost:6379> lpush list k3
(integer) 3
localhost:6379> lrange list 0 -1
1) "k3"
2) "k1"
3) "k2"
localhost:6379> rpush list k4
(integer) 4
localhost:6379> lrange list 0 -1
1) "k3"
2) "k1"
3) "k2"
4) "k4"
localhost:6379>
LRANGE list start end 获取list 起止元素(索引从左往右 递增)
LPUSHX/RPUSHX list value 向已存在的列名中push值(一个或者多个)
localhost:6379> lpushx list k5
(integer) 5
localhost:6379> lrange list 0 -1
1) "k5"
2) "k3"
3) "k1"
4) "k2"
5) "k4"
localhost:6379> lpushx list1 k6
(integer) 0
localhost:6379>
LINSERT list after value insert_value 在指定列表元素的前/后 插入value
localhost:6379> linsert list after k1 k6
(integer) 6
localhost:6379> lrange list 0 -1
1) "k5"
2) "k3"
3) "k1"
4) "k6"
5) "k2"
6) "k4"
localhost:6379>
LLEN list 查看列表长度
localhost:6379> llen list
(integer) 6
localhost:6379>
LINDEX list index 通过索引获取列表元素
localhost:6379> lindex list 0
"k5"
localhost:6379> lindex list -1
"k4"
localhost:6379> lindex list 5
"k4"
localhost:6379>
LSET list index value 通过索引为元素设值
localhost:6379> lset list 0 kk5
OK
localhost:6379> lrange list 0 -1
1) "kk5"
2) "k3"
3) "k1"
4) "k6"
5) "k2"
6) "k4"
localhost:6379>
LPOP/RPOP 从最左边/最右边移除值 并返回
localhost:6379> lpop list
"kk5"
localhost:6379> lrange list 0 -1
1) "k3"
2) "k1"
3) "k6"
4) "k2"
5) "k4"
localhost:6379> rpop list
"k4"
localhost:6379> lrange list 0 -1
1) "k3"
2) "k1"
3) "k6"
4) "k2"
localhost:6379>
RPOPLPUSH 将列表的尾部(右)最后一个值弹出,并返回,然后加到另一个列表的头部
localhost:6379> lrange list 0 -1
1) "k3"
2) "k1"
3) "k6"
4) "k2"
localhost:6379> rpoplpush list list
"k2"
localhost:6379> lrange list 0 -1
1) "k2"
2) "k3"
3) "k1"
4) "k6"
localhost:6379>
LTRIM 通过下标截取指定范围内的列表
注意:截取后源数组变成截取后的数组,其它数据消失
localhost:6379> lrange list 0 -1
1) "k2"
2) "k3"
3) "k1"
4) "k6"
localhost:6379> ltrim list 0 1
OK
localhost:6379> lrange list 0 -1
1) "k2"
2) "k3"
localhost:6379>
LREM List中是允许value重复的 count > 0:从头部开始搜索 然后删除指定的value 至多删除count个 count < 0:从尾部开始搜索… count = 0:删除列表中所有的指定value。
lrem list 3 k1 从头部开始删除三个k1
localhost:6379> lrange list 0 -1
1) "k1"
2) "k1"
3) "k2"
4) "k3"
5) "k1"
localhost:6379> lrem list 3 k1
(integer) 3
localhost:6379> lrange list 0 -1
1) "k2"
2) "k3"
lrem list -2 k1 从尾部开始删除两个k1
localhost:6379> lpush list k1 k1 k1
(integer) 6
localhost:6379> lrange list 0 -1
1) "k1"
2) "k1"
3) "k1"
4) "k1"
5) "k2"
6) "k3"
localhost:6379> lrem list -3 k1
(integer) 3
localhost:6379> lrange list 0 -1
1) "k1"
2) "k2"
3) "k3"
localhost:6379>
BLPOP/BRPOP 移出并获取列表的第一个/最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
localhost:6379> blpop list 10
1) "list"
2) "k3"
localhost:6379> lrange list 0 -1
(empty array)
localhost:6379> blpop list 10
(nil)
(10.04s)
localhost:6379>
BRPOPLPUSH source destination timeout
和RPOPLPUSH功能相同,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
localhost:6379> lpush list k1
(integer) 1
localhost:6379> lpush list2 k2
(integer) 1
localhost:6379> brpoplpush list2 list 10
"k2"
localhost:6379> lrange list 0 -1
1) "k2"
2) "k1"
localhost:6379> lrange list2 0 -1
(empty array)
localhost:6379> brpoplpush list2 list 3
(nil)
(3.02s)
localhost:6379>
Set集合
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
SADD key member1[member2..]
向集合中无序增加一个/多个成员
localhost:6379> sadd myset m1 m2 m3 m4
(integer) 4
SCARD key
获取集合的成员数
localhost:6379> scard myset
(integer) 4
SMEMBERS key
返回集合中所有的成员
localhost:6379> smembers myset
1) "m2"
2) "m1"
3) "m3"
4) "m4"
SISMEMBER key member
查询member元素是否是集合的成员
localhost:6379> sismember myset m5
(integer) 0
localhost:6379> sismember myset m4
(integer) 1
SRANDMEMBER key [count]
随机返回集合中count个成员,count缺省值为1
localhost:6379> srandmember myset 1
1) "m2"
localhost:6379> srandmember myset 1
1) "m1"
SPOP key [count]
随机移除并返回集合中count个成员,count缺省值为1
localhost:6379> spop myset 2
1) "m2"
2) "m4"
localhost:6379> smembers myset
1) "m1"
2) "m3"
SMOVE source destination member
将source集合的成员member移动到destination集合
localhost:6379> smembers myset
1) "m2"
2) "m1"
3) "m3"
4) "m4"
localhost:6379> smove myset newset m3
(integer) 1
localhost:6379> smembers myset
1) "m2"
2) "m1"
3) "m4"
localhost:6379> smembers newset
1) "m3"
SREM key member1[member2..]
移除集合中一个/多个成员
localhost:6379> srem newset m3
(integer) 1
localhost:6379> smembers newset
(empty array)
SDIFF key1[key2..]
返回所有集合的差集 key1- key2 - …
SDIFFSTORE destination key1[key2..]
在SDIFF的基础上,将结果保存到集合中==(覆盖)==。不能保存到其他类型key噢!
SINTER key1 [key2..]
返回所有集合的交集
localhost:6379> sinter set1 set2
1) "m2"
2) "m4"
SINTERSTORE destination key1[key2..]
在SINTER的基础上,存储结果到集合中。覆盖
SUNION key1 [key2..]
返回所有集合的并集
localhost:6379> sadd set1 m1 m2 m3 m4 m5
(integer) 5
localhost:6379> sadd set2 m2 m4 m6 m7
(integer) 4
localhost:6379> sunion set1 set2
1) "m2"
2) "m7"
3) "m5"
4) "m6"
5) "m1"
6) "m3"
7) "m4"
SUNIONSTORE destination key1 [key2..]
在SUNION的基础上,存储结果到及和张。覆盖
SSCAN KEY [MATCH pattern] [COUNT count]
在大量数据环境下,使用此命令遍历集合中元素,每次遍历部分
- cursor - 游标。
- pattern - 匹配的模式。
- count - 指定从数据集里返回多少元素,默认值为 10 。
localhost:6379> sscan set1 0
1) "0"
2) 1) "m2"
2) "m3"
3) "m1"
4) "m5"
5) "m4"
localhost:6379> sscan set1 0 match m*
1) "0"
2) 1) "m2"
2) "m3"
3) "m1"
4) "m5"
5) "m4"
localhost:6379>
Hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Set就是一种简化的Hash,只变动key,而value使用默认值填充。可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。
HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。重复设置同一个field会覆盖,返回0
localhost:6379> hset students name sakura age 23
(integer) 2
HMSET key field1 value1 [field2 value2..]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
HSETNX key field value
只有在字段 field 不存在时,设置哈希表字段的值。
HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
localhost:6379> hexists students name
(integer) 1
localhost:6379> hexists students adddr
(integer) 0
HGET key field value
获取存储在哈希表中指定字段的值
localhost:6379> hget students name
"sakura1"
HMGET key field1 [field2..]
获取所有给定字段的值
localhost:6379> hmget students name age
1) "sakura1"
2) "23"
HGETALL key
获取在哈希表key 的所有字段和值HKEYS key
获取哈希表key中所有的字段
localhost:6379> hgetall students
1) "name"
2) "sakura1"
3) "age"
4) "23"
HLEN key
获取哈希表中字段的数量
localhost:6379> hlen students
(integer) 2
HVALS key
获取哈希表中所有值
localhost:6379> hvals students
1) "sakura1"
2) "23"
HDEL key field1 [field2..]
删除哈希表key中一个/多个field字段
localhost:6379> hdel students age name
HINCRBY key field n
为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 样只适用于整数型字段
localhost:6379> hincrby students age 1
(integer) 23
HINCRBYFLOAT key field n
为哈希表 key 中的指定字段的浮点数值加上增量 n。
HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的键值对。
Zset 有序集合
不同的是每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大的排序。
score相同:按字典顺序排序
有序集合的成员是唯一的,但分数(score)却可以重复。
ZADD key score member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
localhost:6379> zadd zset 1 m1 2 m2 3 m3
(integer) 3
ZCARD key
获取有序集合的成员数
localhost:6379> zcard zset
(integer) 3
ZCOUNT key min max
计算在有序集合中指定区间score的成员数
localhost:6379> zcount zset 0 2
(integer) 2
ZINCRBY key n member
有序集合中对指定成员的分数加上增量 n
localhost:6379> zincrby zset 5 m2
"7"
ZSCORE key member
返回有序集中,成员的分数值
localhost:6379> zscore zset m1
"1"
localhost:6379> zscore zset m2
"7"
ZRANK key member
返回有序集合中指定成员的索引
localhost:6379> zrank zset m1
(integer) 0
localhost:6379> zrank zset m2
(integer) 2
localhost:6379> zrank zset m3
(integer) 1
ZRANGE key start end
通过索引区间返回有序集合成指定区间内的成员
localhost:6379> zrange zset 0 1
1) "m1"
2) "m3"
localhost:6379> zrange zset 0 -1
1) "m1"
2) "m3"
3) "m2"
ZRANGEBYLEX key min max
通过字典区间返回有序集合的成员
localhost:6379> zadd set 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
localhost:6379> zrangebylex set - [c
1) "a"
2) "b"
3) "c"
localhost:6379> zrangebylex set - [g
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
localhost:6379> zrangebylex set - (c
1) "a"
2) "b"
localhost:6379>
ZRANGEBYSCORE key min max
通过分数返回有序集合指定区间内的成员==-inf 和 +inf分别表示最小最大值,只支持开区间()==
ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量
ZREM key member1 [member2..]
移除有序集合中一个/多个成员
ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员
ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员
ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员
ZREVRANGE key start end
返回有序集中指定区间内的成员,通过索引,分数从高到底
ZREVRANGEBYSCORRE key max min
返回有序集中指定分数区间内的成员,分数从高到低排序
ZREVRANGEBYLEX key max min
返回有序集中指定字典区间内的成员,按字典顺序倒序
ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
ZINTERSTORE destination numkeys key1 [key2 ..]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中,numkeys:表示参与运算的集合数,将score相加作为结果的score
ZUNIONSTORE destination numkeys key1 [key2..]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
ZSCAN key cursor [MATCH pattern\] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)