1.在docker上安装redis之后,具体可以看我之前的docker教程
一.进入docker的redis容器中
#进入docker的redis容器中
docker exec -it redis /bin/bash
#启动redis
redis-cli
#设置键
set mykey abc
#取出键
get mykey
#删除键
del mykey
二,Redis 数据类型
字符串(string),哈希(hash),列表(list),集合(set),有序集合(zset)
三,Redis命令
1.启动redis
redis-cli
#远程启动 -h host -p 端口 -a redis 密码
redis-cli -h 127.0.0.1 -p 6379 -a '123456'
1.键
#基本语法
command key_name
#实例
#1.set 设置键
set key 'aaa'
#2.del 删除键
del mykey
#3.dump 序列化值
dump key
#4.exists 检查键是否存在
exists key
#5.设置 key 的过期时间 second时间 单位秒 milliseconds 单位毫秒 timestamp 时间戳
expire key second
pexpire milliseconds
expireat key timestamp
#6.Keys 命令用于查找所有符合键值
keys value
#例:查询所有以开头mysql的键值
key mysql*
#7.move 移动键值打到其他数据库db
move key
#8.select 选择其他数据库db
select 3
#9.persist 设置key永不过期
persist key
#10.pttl 返回键的剩余过期时间
pttl key
#11.randomkey从当前数据库中随机返回一个 key
randomkey
#12.rename 修改键的名称
rename key newkey
#13.renamenx 用于在新的 key 不存在时修改 key 的名称
renamenx key newkey
#14.scan 迭代数据库中的数据库键。
scan 0
15.type 返回键的类型
type key
2.字符串
string 是 redis 最基本的类型
#1.set 添加键
set mykey abc
#2.get 获取键
get mykey
#3.del 删除键
del mykey
#4.getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
#获取当前键的字符串的前四个
getrange mykey 0 3
#获取当前键的所有的字符串
getrange mykey 0 -1
#5.getset 给键设置新值,并返会旧值
set mykey aa
#6.getset 设置新值
getset mykey bb
#7.mget 输入多个键,返回多个值
set key1 aaa
set key2 bbb
mget key1 key2
#8.msetnx 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
#9.psetex key millseconds values 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
#10.APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
2.Hash(哈希)
hash 是一个键值(key=>value)对集合
#1.添加一个哈希键值
hmset hmkey field1 'aaa'
#2.添加多个哈希键值
hmset hmykey field2 'Hello' field3 'World'
#3.获取键的第一个对象
hget hmykey field1
#4.获取键的第二个对象
hget hmykey field2
#5.获取键的多个值
hmget hmkey field1 field2
#6.删除一个或多个哈希键值
hdel kmykey field1 [field2]
#7.查看相关字段是否存在
hexists hmkey field2
hexists hmkey field1
#8.获取相关键的所有字段
hkeys hmkey
#9.获取相应键的长度
hlen hmkey
#10.获取相应键的所有值
hvals hmkey
3.List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。
#1.添加列表的第一个值
lpush lmykey redis
#添加列表的第二个值
lpush lmykey mongodb
添加列表的第三个值
lpush lmykey mysql
#2.获取列表指定范围内的元素
lrange lmykey 0 10
#3.通过索引获取列表
lindex lmkey
#6.获取列表的长度
llen lmykey
#7.移除并获取列表的第一个元素
lpop lmykey
#8.将一个或多个元素添加到列表头部,不存在则创建一个
lpush lmykey "aaa" "bbb"
#9.将一个值插入到已存在的列表头部
lpushx lmykey "ccc"
#10.移除列表元素
lrem lmykey [aaa]
#11.通过索引设置元素的值
lset lmykey 0 ddd
#12.使列表保留指定区间的元素,其他都删除
ltrim lmykey 1 3
#13.删除并返回列表最后的元素
rpop lmykey
#14.在列表添加一个或多个元素
rpush lmykey fff [ggg]
#15.为已存在的列表添加值
rpushx lmykey kkk
#16.移除并获取列表的第一个元素,并设置等待超时-
blpop lmykey 100
#17.移除并获取列表最后一个元素,并设置等待超时
brpop lmykey 100
4.Set(集合)
Redis 的 Set 是 string 类型的无序集合。
#添加集合
#1.添加第一个集合元素
sadd smykey redis
#添加第二个集合元素
sadd smykey mongodb
#添加第三个集合元素
sadd smykey mysql
#2.取值
smembers smykey
#3.获取集合的成员数,就是集合的大小
scard smykey
#4.返回第一个集合和其他集合的差异
sadd smykey1 redis mongodb mysql aaa
sadd smykey2 redis mongodb mysql ccc
sdiff smykey1 smykey2
5.sdiffstore 将两个集合不同的部分生成应该新的集合
sadd smykey1 redis mongodb mysql aaa
sadd smykey2 redis mongodb mysql ccc
sdiffstore dsmykey smykey1 smykey2
#6.sinterstore 返回给定集合的交集,并存在一个新的集合中
sinterstore simykey smykey1 smykey2
#7.sismember 判断元素是否在集合中
sismember smykey redis
#8.smembers 返回集合的所有元素
smembers smykey
#9.smove 移动集合的元素
smove smykey smykey1 redis
#10.删除并返回集合的随机元素
spop smykey
#11.srandmember返回集合中的多个随机数
#随机返回3个集合的数据
srandmember smykey 3
#12.srem 删除一个或多个元素
srem smykey aaa [redis]
#13.sunion 返回给定集合的并集
sunion smykey1 smykey2
#14.sunionstore 将给定集合的并集,生成一个新的集合
sunionstore sumykey smykey1 smykey2
5.zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
#1.zadd添加唯一集合
#添加第一个集合元素
zadd zmykey 0 redis
#添加第二个集合元素
zadd zmykey 0 mongodb
#2.zrangebyscore 获取指定范围取值
zrangebyscore zmykey 0 10
#3.zcard 获取集合的成员数
zcard zmykey
#4.zcount 获取指定区间的成员数
zcount zmykey 1 7
#5.zinterstore 将给定集合的数据的交集
zinterstore zimykey 0 zmykey1 zmykey2
#6.zlexcount 计算有序集合的成员数
zlexcount zmykey 1 9
#7.zrange 返回指定集合区间的元素
zrange zmykey 0 9
#8.zrank 返回有序集合中指定成员的索引
zrank zmykey aaa
#9.zrem 移除指定集合的一个或多个元素
zrme zmykey aaa
#10.zremrangebylex 移除有序集合中给定的字典区间的所有成员
zremrangebylex zmykey aaa ccc
#11.zremrangebyrank移除有序集合中给定的排名区间的所有成员
zremrangebyrank zmykey 2 4
#12.zremrangebyscore移除有序集合中给定的分数区间的所有成员
zremrangebyscore zmykey 1 3
#zrevrange 返回有序集中指定区间内的成员,通过索引,分数从高到低
zrevrange zmykey 1 3
#zrevrangebyscore 返回有序集中指定分数区间内的成员,分数从高到低排序
zrevrangebyscore zmykey 3 1
#zrevrank 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
zrevrangk zmykey aaa
#zscore 返回有序集中,成员的分数值
zscore zmykey aaa
#zunionstore 计算给定的一个或多个有序集的并集,并存储在新的 key 中
zunionstore zumykey zmykey1 zmykey2
四,Redis 发布订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 客户端可以订阅任意数量的频道。
# subscribe 发布订阅
#创建订阅名为 rChat
subscribe rchat
#publish 在同一个频道 rChat 发布两次消息,订阅者就能接收到消息。 需要在一个新的窗口执行
publish rchat 'redis test'
publish rchat 'redis test'
#pubsub 查看当前的订阅和发布状态
pubsub channels
#punsubscribe 用于退订所有给定模式的频道。
punsubscribe xchat
#subscribe 订阅给定的一个或多个频道的信息。
subscribe xchat
#unsubscribe 指退订给定的频道。
unsubscribe xchat
五,Redis事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
#开始事务
multi
#命令入队
set sname redis
set sname mysql
#执行事务
exec
#取消事务,将exec换成discard就取消当前事务
discard
#监视对一个或多个键,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
watch mykey
#取消所有监视的键
unwatch
六,Redis 连接
#链接数据库
auth '密码'
#打印字符串
echo '信息'
#查看服务是否运行
ping
#关闭当前连接
quit
#切换到指定的数据库
select index
七,Redis 服务器
#显示服务器统计信息
info
#列出已有连接
client list
#杀死指定连接
client kill 127.0.0.1:4593
#设置连接名
client setname hconnect
#果连接没有设置名字,那么返回空白回复; 如果有设置名字,那么返回名字
client getname
#返回主从实例所属的角色
role
#同步保存数据到硬盘
save
#异步保存数据到硬盘,并关闭服务器
shutdown
#将当前服务器转变为指定服务器的从属服务器(slave server)
slaveof host port
八,Redis Stream
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。
#1.XADD 使用 XADD 向队列添加消息,如果指定的队列不存在,则创建一个队列
#格式
xadd key ID field value [field value]
#例: 注:消息 id,我们使用 * 表示由 redis 生成,可以自定义,但是要自己保证递增性。
xadd xkey * xname 'aaaa'
#2.xtrim 使用 XTRIM 对流进行修剪,限制长度
例子 xtrim key maxlen [~] count
xtrim xkey maxlen 3
#3.xdel 使用 XDEL 删除消息
xdel key id [id]
#4.xlen 使用 XLEN 获取流包含的元素数量,即消息长度
xlen xley
#5.xrand 使用 XRANGE 获取消息列表,会自动过滤已经删除的消息
xrange xkey - +
# 6.xrevrange 使用 XREVRANGE 获取消息列表,会自动过滤已经删除的消息
xrevrange xkey - +
#7.xread 使用 XREAD 以阻塞或非阻塞方式获取消息列表
xread count 2 streams mystream xkey 0-0 0-0
#8.xgroup create 使用 XGROUP CREATE 创建消费者组
#9.使用 XREADGROUP GROUP 读取消费组中的消息
九,Redis 数据备份与恢复
#1.SAVE 命令用于创建当前数据库的备份
save
#注:如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
#2.config #获取 redis 目录可以使用 CONFIG 命令
config get dir
#3.bgsave 创建 redis 备份文件也可以使用命令 BGSAVE
#十.Redis 安全
通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。
#查看是否设置了密码验证
config get requirepass
#设置密码
CONFIG set requirepass "123456"
#验证密码 auth 密码
auth 123456
十一,Redis 性能测试
该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令
redis-benchmark -n 10000 -q
#-h 指定服务器主机名
#-p 指定服务器端口
#-c 指定并发连接数
#-n 指定请求数
#-q 强制退出 redis。仅显示 query/sec 值
#-d 以字节的形式指定 SET/GET 值的数据大小
#十二,Redis 客户端连接
#查看最大连接数
config get maxclients
#返回连接到 redis 服务的客户端列表
client list
#设置当前连接的名称
client setname
#获取通过 CLIENT SETNAME 命令设置的服务名称
client getname
#挂起客户端连接,指定挂起的时间以毫秒计
client pause
#关闭客户端连接
client kill
十三,Redis 管道技术
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
#查看 redis 管道,只需要启动 redis 实例并输入以下命令
学习自 菜鸟教程