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 给指定锁加时效

        

posted on 2019-12-09 14:34  anpeiyong  阅读(280)  评论(0编辑  收藏  举报

导航