NoSql优点:
1.对数据库高并发读写需求
2.对海量数据的高效率存储和访问
3.对数据库的高扩展性和高可用性的需求
2 主要的NoSql数据库分类:
1.键值存储数据库(存的是键值对)
优点:快速查询 缺点:存储的数据缺少结构化
2.列存储数据库(以列簇式存储,将同一列数据存在一起)
优点:查找速度快,可扩展性强,更容易进行分布式扩展
缺点:功能相对局限
3.文档型数据库(一系列键值对):
优点:数据结构要求不严格
缺点:查询性能不高,而且缺乏统一的查询语法
4.图形数据库(图结构)
优点:利用图结构相关算法
缺点:需要对整个图做技术,不容易做分布式的集群方案
3
redis是一个开源的使用c语言编写的 key-value数据库,并提供多种语言的AIP
redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现了master-alave(主从)同步
主从同步:数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器
4
设置键:set myKey 值; 得到键 get myKey
redis的配置文件在redis的安装目录下的redis.conf文件中
可以使用 CONFIG GET * 得到所有的配置项 也可以使用 CONFIG GET "配置名" 得到配置信息
使用 CONFIG SET 配置名 “值”来修改配置
指定Redis监听端口,默认端口为6379
redis有时会产生中文乱码:redis-cli --raw 可以避免中文乱码
5 基础命令
1.del key(删除key)
2.dump key 序列化指定的key 并返回被序列化的值
3.exists key 检查key是否存在
4.设置多个键值对 mset key value [key value ..]
5.订阅模式:当有消息发给主机时,主机会同步把消息转给他的子机
创建订阅者: SUBSCRIBE 订阅频道名
订阅一组频道:psubscribe 频道号*
6.redis 开启事物:multi 开头 以 exec 命令结尾 执行multi 和exec所有的命令 discard 回滚事物
单个redis命令的执行是原子性的,但redis没有在事物上增加任何维持原子性的机制
所以redis事物执行并不是原子性的,中间某条指令的失败不会导致前面的命令回滚,也不会造成后续的指令不执行
7.redis数据备份和恢复:
备份:save 该命令会在redis的安装目录中创建dump.rdb文件
恢复数据:恢复数据只需要将备份文件dump.rdb移动到redis安装目录并启动服务即可
config get dir 命令得到redis的安装目录
6 redis持久化:
redis提供了两套持久化机制
1.RDB(快照机制 直接恢复快照(默认)):优点:恢复快 缺点:数据容易丢失
2.AOF(日志机制 将我们的每一个记录行命令 记到一个日志文件中 在启动的时候 将命令重新执行一次):优点:数据保持完整 缺点:恢复的慢 文件太大
7 redis分区
优点:1.通过利用多台计算机内存的和值,允许我们构造更大的数据库
2.通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽
缺点:1.涉及多个key的操作通常是不被支持的:就是当2个set映射到不同的redis上就不能对这两个set执行交集操作
2.涉及多个key的redis事物不能使用
3.使用分区时数据处理较为复杂
分区类型:
1.范围分区
2.哈希分区
8 java使用redis:
1.链接本地redis
Jedis jedis=new Jedis("localhost");
2.查看服务是否运行
syso(jedis.ping());
3.设置redis字符串
jedis.set("键","值");
4.获取数据 通过键得到值
jedis.get("键");
3.设置list存储
jedis.lpush("集合名","值");
4.获得存储的值
List<String>list=jedis.lrange("集合名",开始的位置,结束的位置)//会截到这个集合这个范围的值
4.返回set集合
jedis.keys("*")