关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,
让NoSQL数据库对关系型数据库的不足进行弥补。
一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据
相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化
## 列存储数据库
相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限
相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法
## 图形(Graph)数据库
相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
## 概念
// 获取连接
Jedis jedis = new Jedis("localhost",6379);
// 操作
jedis.set("username","zhangsan");
// 关闭连接
jedis.close();
@Test/* 操作字符串String */
public void test02() {
// 获取连接
Jedis jedis = new Jedis(); //空参构造,默认("localhost",6379)
// 存储
jedis.set("cat","001");
// 获取
String cat = jedis.get("cat");
System.out.println(cat);
// 存储有时限的数据
jedis.setex("dog",10,"002"); // 时间单位:秒
// 关闭连接
jedis.close();
}
@Test /* 操作Hash */
public void test03() {
// 获取连接
Jedis jedis = new Jedis();
// 存储
jedis.hset("map","cat","111");
jedis.hset("map","dog","222");
jedis.hset("map","rat","333");
// 获取
String cat = jedis.hget("map", "cat");
System.out.println(cat);
// 获取hash中的map中的所有数据
Map<String, String> map = jedis.hgetAll("map");
// 输出
Set<String> keySet = map.keySet();
for (String s : keySet) {
String value = map.get(s);
System.out.println(s+":"+value);
}
// 关闭连接
jedis.close();
}
@Test /* 操作List(允许重复) */
public void test04() {
// 获取连接
Jedis jedis = new Jedis();
// 存储
jedis.lpush("list","A","B","C","D");
jedis.rpush("list","A","B","C","D");
// 打印
List<String> list = jedis.lrange("list", 0, -1);
System.out.println(list);
// 弹出
String element1 = jedis.lpop("list");
String element2 = jedis.lpop("list");
// 打印
System.out.println(element1);
System.out.println(element2);
List<String> list2 = jedis.lrange("list", 0, -1);
System.out.println(list2);
// 关闭连接
jedis.close();
}
@Test /* 操作Set(不允许重复) */
public void test05() {
// 获取连接
Jedis jedis = new Jedis();
// 存储
jedis.sadd("set","A","B","C","D");
// 获取
Set<String> set = jedis.smembers("set");
// 打印
System.out.println(set);
// 关闭连接
jedis.close();
}
@Test /* 操作SortedSet(不允许重复,有序) */
public void test06() {
// 获取连接
Jedis jedis = new Jedis();
// 存储
jedis.zadd("sortedSet",1,"cat");
jedis.zadd("sortedSet",2,"dog");
jedis.zadd("sortedSet",3,"rat");
// 获取
Set<String> sortedSet = jedis.zrange("sortedSet", 0, -1);
// 打印
System.out.println(sortedSet);
// 关闭连接
jedis.close();
}
// 创建连接池配置对象
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 设置配置
jedisPoolConfig.setMaxTotal(50);
jedisPoolConfig.setMaxIdle(10);
// 创建连接池对象,并传入连接池配置对象
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379);
// 获取连接
Jedis resource = jedisPool.getResource();
// 使用
resource.set("name", "cat");
String s = resource.get("name");
System.out.println(s);
// 关闭,归还到连接池中
resource.close();
设置 JedisPoolUtil工具类
public class JedisPoolUtil {
// 连接池对象
private static JedisPool jedisPool;
static {
// 读取配置文件
Properties properties = new Properties();
// 创建properties对象
InputStream resourceAsStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
try {
// 加载文佳
properties.load(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
// 创建连接池配置文件对象
JedisPoolConfig config = new JedisPoolConfig();
// 设置
config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
// 初始化连接池对象
jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
设置之后的操作,简化了很多
public class JedisPoolUtil {
// 连接池对象
private static JedisPool jedisPool;
static {
// 读取配置文件
Properties properties = new Properties();
// 创建properties对象
InputStream resourceAsStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
try {
// 加载文佳
properties.load(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
// 创建连接池配置文件对象
JedisPoolConfig config = new JedisPoolConfig();
// 设置
config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
// 初始化连接池对象
jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}