<address id="xvfrz"></address>

              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 持久化)和从机(主从连接)。

              相关文章
              相关标签/搜索
              2019年所有开马的记录