Redis---系统学习
1、安装Redis
Docker
2、查看Redis配置
进入Docker中的Redis容器;
进入启动命令目录;cd /usr/local/bin/
启动redis客户端;./redis-cli
config 命令查看配置:
config get * 查看所有配置
config set 修改配置
3、Redis的value支持的类型:
string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)
4、Redis命令:
客户端命令:
redis-cli 启动redis客户端
redis-cli -h host -p port -a password 远程启动redis客户端
watch key 监视一个(或多个) key ,如果 在事务执行之前 这个(或这些) key 被其他命令所改动,那么 事务将被打断;
setnx key value (SET if Not eXists) 指定的 key 不存在时,为 key 设置指定的值;
expire key time 设置 key 的过期时间,key 过期后将不再可用,单位以秒计;
setex key time value 设置 指定的 key 值 及 过期时间,如果 key 已经存在, SETEX 命令将 会 替换旧的值;
getset key value 设置指定 key 的值,返回 key 的旧值;
incr key 将key存储的 value值(必须是数字类型,不然报错)进行增一;
服务器命令:
连接命令:
auth 密码 验证密码是否正确
echo 要打印的字符串 打印字符串
ping 查看服务是否运行
quit 关闭当前连接
select 数据库名称 切换数据库
5、Redis发布/订阅
6、Redis事务
6.1、Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
6.2、Redis事务从开始到执行的过程:
开始事务--->命令入队--->执行事务
6.2、redis事务命令
discard 取消事务,放弃执行事务块中的所有命令;
exec 执行事务块中的命令;
multi 标记一个事务的开始;
eg:
7、Redis客户端连接
7.1、Redis 通过 监听一个TCP端口(或者 Unix Socket 的方式 )接收 来自客户端 的连接;
8、Redis特性
8.1、性能极高 – 读的速度是11万次/s,写的速度是8万次/s;
为什么Redis读写速度极高?
硬盘存储的数据库:
插入行操作 只会在文件末尾进行写入;
更新操作 相当慢,会引发 一次随机读,可能会引发 一次随机写;
内存存储:
发送给Redis服务器的命令 不需要经过 查询分析器、查询优化器 进行处理;
8.2、支持事务;
8.3、丰富的数据结构;
8.4、支持发布、订阅;
8.5、key-value存储 的 内存数据库;
8.6、持久化
解决什么问题? 当服务器被关闭时,服务器存储的数据何去何从 ;
如何解决? Redis提供2种不同形式的持久化方法...;
8.7、主从复制
解决什么问题? 1、单redis服务器无法处理所有的请求 2、单Redis服务器发生故障
如何解决?
Redis提供了主从复制:从服务器 连接 主服务器->接收主服务器发送的整个数据库的初始副本;
主服务器 执行的写命令 被 发送给所有的从服务器->从服务器执行接收到的命令;
9、以 命名空间开头方式 对 Redis数据进行 分组存储
key名称 : value
10、Redis持久化
10.1、Redis支持 2种不同的持久化方式 将数据存储到硬盘中:
a,快照: 将 存在于某一时刻的所有数据 写入硬盘;
b,只追加文件: 在 执行写命令时,将 被执行的写命令复制到硬盘;
11、Redis的主从复制
11.1、拉取镜像
docker pull redis
11.2、运行主Redis容器
docker run -p
6379
:
6379
--name redis -d redis redis-server --appendonly yes
(redis-server:在容器执行redis-server启动命令 --appendonly yes :打开redis持久化配置)
11.3、运行从Redis容器
docker run --name redis-6380 -p 6380:6379 -d redis redis-server
11.4、查看主、从Redis 内网的IP地址信息
docker inspect 容器名称(或容器ID)
11.5、进入主、从Redis容器内部查看Redis角色
docker exec -it redis容器名称(或ID) redis-cli
info replication
11.6、设置 从Redis容器的master
进入从Redis容器 docker exec -it redis容器名称(或ID) redis-cli
执行 SLAVEOF ip地址 端口
11.7、主从测试
12、Redis锁
12.1、watch指令
a,一旦watch指令监控某个key,同一个会话的事务将会失效
b,必须在事务之前watch
c,unwatch 取消锁
12.2、setnx指令
a,setnx key value value有值,操作失败,value无值,操作成功,加锁
setnx key value --->业务操作--->del key
b,拿锁的线程由于某种原因没有释放锁
expire指令
aa,expire key time 给指定锁加时效