NoSQL概述
not only SQL 泛指非关系型数据库
- 有效解决高并发读写问题
- 解决海量数据的高效率存储和访问
- 高扩展性和高可用性
NoSQL四大分类
键值对存储
可快速查询数据,但数据结构性较差
列存储
查找速度快,扩展性强,但使用较为局限
文档数据库
数据结构要求不是很严格,查询效率较低,缺少统一语法
图形数据库
利用图结构算法,需要对图计算才能得出结果,不容易做分布式处理
NoSQL特点
- 易扩展
- 灵活的数据模型
- 大量数据高性能存储
- 高可用
Redis概述
高性能键值对数据库
支持的数据类型
- String类型
- List类型
- Hash类型
- Set类型
- SortedSet类型
Jedis
Jedis是Redis官方推荐的Java客户端开发包
Jedis基本操作
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisDemo1 {
// 单实例测试
@Test
public void Single() {
// 设置IP地址和窗口号
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 保存数据
jedis.set("name", "test");
// 获取数据
String value = jedis.get("name");
System.out.println(value);
// 释放资源
jedis.close();
}
// 连接池方式连接
@Test
public void pool() {
// 获得连接池配置对象
JedisPoolConfig config = new JedisPoolConfig();
// 设置最大连接数
config.setMaxTotal(30);
// 设置最大空闲数
config.setMaxIdle(15);
// 获得连接池
JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379);
// 获得核心对象
Jedis jedis = null;
try {
// 通过连接池获得连接
jedis = jedisPool.getResource();
// 设置数据
jedis.set("name", "test");
// 获取数据
String value = jedis.get("name");
System.out.println(value);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (jedis != null) {
// 释放资源
jedis.close();
}
if (jedisPool != null) {
jedisPool.close();
}
}
}
}
Redis数据结构
key注意点
- 不要过长(不超过1024字节,会消耗内存并降低查找速度)
- 不要过短(降低可读性)
String存储
- 二进制安全,存入和获取数据相同
- value最多可以容纳的数据是512M
String常用命令
- 赋值
- 取值
- 删除
- 扩展
- 数值增减
存储Hash
- String key 和 String value 的map容器
- 每一个Hash可以存储大量的键值对
常用操作
- 赋值
- 取值
- 删除
- 自学命令
- 增加数字
存储List
- 双向链表增加数据
- 双向链表减少数据
- ArrayList使用数组方式
- LinkList使用双向链接方式
常用命令
- 两端添加
- 查看列表
- 两端弹出
- 获取列表元素个数
- 扩展命令
Redis
- 多数据库
- Redis事务
Redis持久化
两种持久化方式
RDB
默认支持,不需要配置,在指定的间隔内将内存中数据会写到硬盘中
AOF
以日志的形式进行记录,服务器启动过程中读取日志进行数据还原
不持久化
仅将Redis当作缓存
RDB
优势
仅产生一个文件便于管理和灾难恢复以及实现性能最大化
劣势
按时回写到磁盘,无法避免数据丢失
AOF
优势
带来更高的数据安全性/数据一致性问题有良好的解决工具/如果日志过大,redis可以自动启动重写机制
劣势
文件较大/运行效率低/需要进行相应的配置
Redis修改策略
- 每秒同步
- 每修改同步
- 不同步