加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

NoSql和Redis

发布时间:2020-12-13 13:27:49 所属栏目:百科 来源:网络整理
导读:1.NoSQL a)?????? 指一些非关系型的数据库.读写性能高,存储会有过期,数据存放于内存中 b)?????? 分类 ???????????????????? i.??????????? 键值数据库 ?????????????????? ii.??????????? 列存储数据库 ????????????????? iii.??????????? 文档型数据库 redi

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,map等).

c)??????? Redis数据库的优势

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读