zoukankan      html  css  js  c++  java
  • Linux配置Redis集群 和 缓存介绍。

    //    一.什么是缓存?
            mybatis一级缓存和二级缓存
                mybatis的一级缓存存在哪?
                    SqlSession,就不会再走数据库
                    什么情况下一级缓存会失效?
                        当被更新,删除的时候sqlsession结束,也就是最终一级缓存失效
                    二级缓存存在哪?
                        mapper中的命名空间中(namespace),namespace在内存中(tomcat服务器的内存中)
                        当tomcat服务器重启/停止就会失效
                    无论是一级缓存还是二级缓存都不会永远持久化数据在硬盘中
                mybatis缓存使用率就会很低,而且使用范围很窄(只能使用到对数据库的增删改查)
                当拥有10亿条数据的时候
                    user表中10亿条数据
                    select * from user
                mybatis无法做到大批量数据的查询,查询都无法做到,数据也绝对不会进入到缓存中
                
                
    
    //    二.什么数据会被存入到缓存中?
            2.1.经常用到的数据
            2.2.不会经常修改的数据
                身份证号,性别,名字,省市区,国家名称,组织机构...
                把经常用到并且不会经常发生修改的数据存入到数据库某张表中叫做字典表
                商品名称,商品类目....

    二、Redis介绍和缺点

    //    三、.什么是redis
            称之为缓存,是一个数据库,非关系型数据库
            关系型数据库:
                mysql
                oracle
                表和表之间产生关联,数据和数据之间也可以产生关联,称之为关系型数据库
                
                
            非关系型数据库:
                NOSQL
                没有sql的数据库,数据和数据之间是独立存在的,没有关系,也没有表的概念
                Redis:键值对对应的数据库(数据格式以key和value对应,json,redis中存的就是json格式的数据)
                {key:value, key:value}
                key:[{key, value}, {key, value}]
                
                
        //        面试题:
                    redis中的数据类型都有什么?
                        5种
                        key的类型永远是String
                        value的类型是可以改变
                        String(使用最多的就是String类型)
                        Hash
                        List
                        新版本支持Set:是无序,并且数据唯一(不会重复)(数据不能重复)
                        zSet:是有序,并且数据唯一(数据的标识唯一(索引是唯一的)),数据可以重复
                        老版本依然是Map
                        
    
                MongoDB:文档型数据库
                HBase:列数据库
                所有的NOSQL数据库都在内存中做计算,数据会永久的保存在硬盘中
                当redis启动后,redis会自动向硬盘中加载数据,把这些数据加载到内存中,等待客户端进行查询数据,客户端其实是从内存中把数据获取到,所以效率会非常快!应用场景一般情况下只能应用缓存!
                redis是以集群的形式存在,在官方文档中说明,如果需要配置redis缓存库,最少需要六台(三主三从)
    
    //    4.redis的缺点:
            4.1.redis必须以集群的形式的存在(6台),占用的资源就非常多!
            4.2.主从之间需要数据的同步
                master-->10万条数据
                follower-->10万条数据
                硬盘占用也非常大
            4.3.redis是在内存中所运算(10万条数据缓存信息),就会占用非常大的内存
            4.4.因为最终因为redis加载机制问题,硬盘和内存需要进行交互,会占用非常大的CPU

    三、Linux配置Redis集群?

        linux配置redis集群
            需要6台服务器(三主三从)
            
            今天使用一台服务器模拟六台    根据端口号的不同进行模拟
        /*    
            5.1.从官网下载redis5.0.5
            
            5.2.使用xftp工具上传linux服务器上
            
            5.3.解压redis的压缩包
                tar -zxvf xxxx
                
            5.4.编译redis
                进入redis的目录
                make && make install
                
                redis不是用Java写的,redis是用C语言写的
                看到以下信息说明编译成功
                        INSTALL install
                        INSTALL install
                        INSTALL install
                        INSTALL install
                        INSTALL install
                    make[1]: Leaving directory `/home/apps/redis-5.0.5/src'
                    
            5.5.在redis的目录中创建redis_cluster文件夹
                mkdir redis_cluster
                
            5.6.在redis_cluster中分别创建端口号的文件夹(6380-6385,redis的默认端口号为6379)
                mkdir 6380...6385
                
            5.7.在6380中创建文件redis.conf
                touch redis.conf
                
                
                添加以下内容:
                    #端口号
                    port 6380
                    #默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
                    bind 192.168.127.139
                    #redis后台运行
                    daemonize yes
                    #pidfile文件对应6380,6381,6382...
                    pidfile /var/run/redis_6380.pid
                    #开启集群,把注释#去掉
                    cluster-enabled yes
                    #集群的配置,配置文件首次启动自动生成 6380,6381,6382
                    cluster-config-file nodes_6380.conf
                    #请求超时,默认15秒,可自行设置
                    cluster-node-timeout 10100
                    #aof日志开启,有需要就开启,它会每次写操作都记录一条日志
                    appendonly yes
                    
                    
                需要进行修改:
                    port 6380
                    bind 本机的ip地址
                    pidfile /var/run/redis_6380.pid(根据端口号修改)
                    cluster-config-file nodes_6380.conf(根据端口号修改)
                    
            5.8.分别向6381-6385copy一份
                cp -r redis.conf ../6381
            5.9.分别根据5.7这一步的配置进行修改
            
            
            5.10.启动redis的集群
                一定要在src目录下启动,在其他的地方无法启动
                ./redis-server ../redis_cluster/6380/redis.conf
                ./redis-server ../redis_cluster/6381/redis.conf
                ./redis-server ../redis_cluster/6382/redis.conf
                ./redis-server ../redis_cluster/6383/redis.conf
                ./redis-server ../redis_cluster/6384/redis.conf
                ./redis-server ../redis_cluster/6385/redis.conf
                
                看到以下信息说明启动成功:
                    7964:C 23 Aug 2019 09:51:54.935 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
                    7964:C 23 Aug 2019 09:51:54.935 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=7964, just started
                    7964:C 23 Aug 2019 09:51:54.935 # Configuration loaded
                    
            5.11.检测redis集群是否启动成功
                ps -ef | grep redis
                
                看到以下信息说明启动成功:
                    root       7940      1  0 09:51 ?        00:00:00 ./redis-server 192.168.23.145:6380 [cluster]   
                    root       7945      1  0 09:51 ?        00:00:00 ./redis-server 192.168.23.145:6381 [cluster]   
                    root       7950      1  0 09:51 ?        00:00:00 ./redis-server 192.168.23.145:6382 [cluster]   
                    root       7955      1  0 09:51 ?        00:00:00 ./redis-server 192.168.23.145:6383 [cluster]   
                    root       7960      1  0 09:51 ?        00:00:00 ./redis-server 192.168.23.145:6384 [cluster]   
                    root       7965      1  0 09:51 ?        00:00:00 ./redis-server 192.168.23.145:6385 [cluster]
            
            
            5.12.创建redis的缓存库
                因为redis最终是以数据库的形式的存在,原理和mysql一样,集群创建成功只能说明安装redis成功了,但是最终redis中并没有自带的缓存库,需要自己手动创建
                !!!!还需要在redis的src中进行
                
                !!!当第一次运行的话,才需要创建数据库,以后的每一次运行都不再需要了,直接启动集群即可!!!
                
                redis-cli --cluster create 
                    192.168.23.138:6380 192.168.23.138:6381 192.168.23.138:6382 192.168.23.138:6383 192.168.23.138:6384 192.168.23.138:6385 
                --cluster-replicas 1
                
                
                !!!!需要自己手动输入yes,如果超时了还没有输入,则会自动退出,需要再次创建!!!!!!
                看到以下信息说明创建redis缓存库成功:
                    [OK] All nodes agree about slots configuration.
                    >>> Check for open slots...
                    >>> Check slots coverage...
                    [OK] All 16384 slots covered.
                    
                    
            5.13.进入redis的缓存中
                也必须要在src目录下进行
                ./redis-cli -h 192.168.23.138 -c -p 6380
                
                
                
            5.14.停止redis
                也必须要在src目录下进行
                ./redis-cli -h 192.168.23.145 -p 6380 shutdown
                ./redis-cli -h 192.168.23.145 -p 6381 shutdown
                ./redis-cli -h 192.168.23.145 -p 6382 shutdown
                ./redis-cli -h 192.168.23.145 -p 6383 shutdown
                ./redis-cli -h 192.168.23.145 -p 6384 shutdown
                ./redis-cli -h 192.168.23.145 -p 6385 shutdown
                
                
                
            5.15.全部关闭
                pkill redis(不推荐使用!!!)
    */
    
        6.强调!!!
            在redis中是没有修改操作的
            只有增删查
            如果需要修改的话,需要进行覆盖
            
        //命令!!!    
            新增:
                set key(String) value(任意改变(5种))-->返回值是"OK"
                
            查询:
                get key(String) --> value(存入的类型)
                
            删除:
                del key(String) -->返回值是Integer(受影响的行数)
                
            设置缓存的失效时间:
                expire key(String) seconds(秒,Long/Integer)-->返回值是Integer(受影响的行数)
  • 相关阅读:
    c++中重载、重写、覆盖的区别
    c++值传递,指针传递,引用传递以及指针与引用的区别
    c/c++中static与extern关键字介绍
    Typedef和#define之间的区别
    c++中sizeof()的用法介绍
    c++笔试题:不使用第三个变量来交换俩个变量的数值
    c++位运算符介绍
    3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建
    2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离
    1.高并发教程-基础篇-之nginx负载均衡的搭建
  • 原文地址:https://www.cnblogs.com/ZXF6/p/11431721.html
Copyright © 2011-2022 走看看