• NoSql和Redis


    1.NoSQL

    a)       指一些非关系型的数据库.读写性能高,存储会有过期,数据存放于内存中

    b)       分类

                         i.            键值数据库

                       ii.            列存储数据库

                      iii.            文档型数据库
    redis和memcached是key-value的Nosql,主要用来做缓存的

    2.Redis

    a)       高性能的开源的菲关系型数据库,数据保存在内存里面或者磁盘里面

    b)       Redis 是以key-value形式存储,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,redis严格上不是一种数据库,应该是一种数据结构化存储方法的集合。数据结构:数组,list,set,map等redis提供了一下操作方法,我们使用这些方法就可以对存入字符串,组织成各种类型数据库结构(string,list,set,map等).

    c)        Redis数据库的优势

                         i.            数据存储:存放在内存,还支持持久化.-存取速度快,并发能力强,数据安全性高
    还支持集群(主从同步) (支持高并发,海量数据), 数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

                       ii.            它支持的存储值的类型

    1. String,list,set,sorted set,hash
    2. 支持集群(支持主从同步)
    3. 支持持久化

    d)       使用场景

                         i.            缓存: 对于经常查询的数据,将其放到Redis里面,会提高查询效率,减少数据库压力

                       ii.            计数器引用:微信点赞数量

                      iii.            实时攻防系统

                      iv.             

    e)       Redis服务器的安装

                         i.            启动Redis服务

    1. 手动启动:在安装目录下启动双击双击redis-service.exe
    2. Cmd启动:

                       ii.            Redis客户端操作Redis

    1. 对value为字符串(String) 操作

    a)       设置单个键值:set

    b)       设置多个键值:mset

    1. 对key的操作

    a)       Keys:获取所有的key列表

    b)       Del key:删除key值

    c)        expire key xx //设置key的过期时间(xx秒后过期)

    d)       ttl key:查看key 的过期时间

    e)       flushall:清除Redis数据库的所有数据

    f)        flushdb  :清除当前库的数据,Redis默认是16个数据库0,1….15

    1. 对list集合的操作
      rdis怎么实现栈(FILO)和队列(FIFO)???
      list控制同一边进,同一边出就是栈
      list控制一边进一边出就是队列
    2. 对Set集合的操作
    3. 对SortedSet(有序集合)的操作
    4. 对hash类型的操作
    5. Redis设置密码

    a)       通过命令设置密码
    CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效

    CONFIG SET requirepass 123456 //将密码设置为123456

    CONFIG SET requirepass "" //清除密码

    AUTH 123456  //输入密码进行认证

    b)       修改Redis的配置文件设置密码
    在配置文件redis.widows.conf中增加一行代码

    requirepass 123456

    将密码123456设置到配置文件中,redis启动时加载该文件,即可启用密码

    3.Java操作Redis服务器使用Jedis客户端

    a)       Jedis简单操作
    导入jedis的包
    @Test
    public void test()throws Exception{
        //创建连接Redis服务器
       
    String host ="127.0.0.1";
        int port = 6379;
        int timeout = 1000;//超时时间,1秒超时
       
    Jedis jedis = new Jedis(host,port,timeout);
    //密码认证
        jedis.auth("admin");
        //执行操作,设置key和value值.
       
    jedis.set("yhptest","yhptest dbl!");
        System.out.println(jedis.get("yhptest"));
        //关闭连接
       
    jedis.close();
    }

    b)       连接池配置

                         i.            通过jedis连接池,简单操作Redis数据库
    /思想:如果创建一个对象后需要为他设置很多值,还不如先创建它配置对象并做完配置,然后再通过配置对象创建它
    //1 创建jedispool配置对象
    //2 做配置-四个
    //3 创建jedispool
    //4 通过jedispool获取连接
    //5 执行操作
    // 6 释放连接
    // 7 摧毁连接池-如果是真正项目中它应该是一个受spring管理的单例
    @Test
    public void test()throws Exception{
        //1 创建jedispool配置对象
       
    JedisPoolConfig config = new JedisPoolConfig();
        //2 做配置-四个
       
    config.setMaxIdle(2);
        config.setMaxTotal(10);
        config.setMaxWaitMillis(1*1000); //创建连接超时
       
    config.setTestOnBorrow(true);//获取连接是测试连接是否畅通
        //3 创建jedispool
        //1*1000 获取连接超时时间
       
    JedisPool pool = new JedisPool(config,
                "127.0.0.1",6379,1*1000,"admin");
        //4 通过jedispool获取连接
       
    Jedis jedis = pool.getResource();
        //5 执行操作
       
    jedis.set("jedispooltest","dbldblddzt.....");
        System.out.println(jedis.get("jedispooltest"));
        // 6 释放连接
       
    jedis.close(); //底层做了兼容,如果是连接池操作就是释放,如果是连接操作就是关闭
        // 7 摧毁连接池-如果是真正项目中它应该是一个受spring管理的单例
       
    pool.destroy();
    }
    总结:先创建Jedis连接池配置对象,然后创建连接池,创建连接池的时候传入连接池配置对象,redis存放的ip地址,Redis端口号,设置连接超时时间和操作Redis的用户,连接池获取到jedis对象,jedis对象操作服务器.关闭连接池和jedis对象

    c)        Jedis数据结构的操作

                         i.            Key值操作

                       ii.            String操作

                      iii.            List操作

                      iv.            Set操作

                       v.            Hash操作

                      vi.            事务处理

                     vii.            排序

    1. 数字集合是通过调用desc和asc方法排序
    2. 字符串字母是通过调用alpha方法进行参数排序.
    3. Redis持久化配置

    a)       两种持久化的方式

                         i.            RDB和AOF,可以通过修改Redis的conf配置文件进行配置

                       ii.            服务器启动执行载入程序à判断是否开启了AOF的持久化,开启了就载入AOF的文件,未开启就载入RDB的文件

                      iii.            RDB模式

    1. RDB模式可以在指定的时间间隔内生成数据集的时间点快照,默认是开启RDB模式的,
    2. 如何关闭默认开启的RDB持久化方式:在Redis.conf文件里面将在指定时间生成数据集的时间快照进行一个注释,如果中途突然断电,无法持久化到磁盘
      save ""

      # save 900 1   //至少在900秒的时间段内至少有一次改变存储同步一次

      # save xxx

      # save 60 10000

         iv.            AOF模式

    1. AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
    2. 如何开启AOF

    a)       appendonly yes         //yes 开启,no 关闭

    # appendfsync always //每次有新命令写时就执行一次fsync 同步

    #这里我们启用 everysec

    appendfsync everysec //每秒 fsync同步 一次

    # appendfsync no      //从不fsync(交给操作系统来处理,可能很久才执行一次fsync),它的参数请大家看redis.conf配置文件详解

         v.            小结:Redis是怎么保存数据的.

    1. redis为了考虑效率,保存数据在内容中.并且考虑数据安全性,还做数据持久化,如果满足保存策略,就会把内存的数据保存到数据rdb文件,还来不及保存那部分数据存放到aof更新日志中。在加载时,把两个数据做一个并集.
    2. Redis的淘汰策略:选择合适的数据进行淘汰

    volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

    volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

    volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

    allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

    allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

    no-enviction(驱逐):禁止驱逐数据

    redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

  • 相关阅读:
    idea问题
    队列的实现
    sqlalchemy 连接mysql8.0报 RuntimeError: cryptograpy si requeired for sha256_password 错误
    ubunut18.04 下安装 gitlab ce版,使用清华源
    在Centos下单机部署kubernetes
    在Centos 7.7下用minikube部署单节点kubernetes.
    访问docker desktop创建的Hyper-v虚拟机DockerDesktopVM
    为kubernetes-dashboard页面增加过期时间,减少登录次数.
    为Docker Desktop安装kubernet-dashboard
    用Hyper-v 在win10下使用Docker-Desktop体验kubernetes
  • 原文地址:https://www.cnblogs.com/8888-lhb/p/11520774.html
Copyright © 2020-2023  润新知