非关系型数据库NOSQL Redis
NOSQL介绍关系型数据库和非关系型数据库的区别关系型数据库(Mysql Oracle SqlServer)非关系型数据库(NOSQL)
Redis的介绍使用Redis的好处Redis的特点应用场景Redis不适用场景Redis使用redis服务器打开redis图形化工具JedisUtil工具读写数据jedis.propertiesCategoryServlet使用redis
NOSQL介绍
(1)什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库 NOSQL是非关系型数据库 Redis: 就是NOSQL 非关系型数据库 MySql Oracle :关系型数据库
关系型数据库和非关系型数据库的区别
关系型数据库(Mysql Oracle SqlServer)
1:数据是由一张张的表组成,而且这些表与表之间有关系(一对一,一对多,多对多) 2:数据是存在硬盘上,每次访问时,是将数据从硬盘读取到内存中
非关系型数据库(NOSQL)
》1: 数据是有一个个的键值对:键 值 》2:数据是存在内存中,在满足需要的时候,也可以将数据存在硬盘上(Redis的持久化)
Redis的介绍
Redis(Remote Dictionary Server ) 远程字典服务,是一个非关系型数据库
使用Redis的好处
每一次页面加载后都会重新请求数据库来加载,对数据库的压力比较大,而且分类的数据不会经常产生变化,所有可以使用redis来缓存这个数据。
Redis的特点
高效性:Redis读取的速度是110000次/s,写的速度是81000次/s 原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。 支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合) 稳定性:持久化,主从复制(集群) 其他特性:支持过期时间,支持事务,消息订阅。
应用场景
Redis一般用来存储经常访问的,但有不经常改变的数据 配合关系型数据库做高速缓存 由于其拥有持久化能力,利用其多样的数据结构存储特定的数据
Redis不适用场景
1 ) 需要事务支持 2 ) 基于sql的结构化查询存储,处理复杂的关系,需要即席查询(用户自定义查询条件的查询)
Redis使用
虽然 访问redis 较快,但是第一次是没有数据的 访问service,获取json,将json保存到redis
redis服务器
打开start.bat,打开服务器
打开redis图形化工具
JedisUtil工具读写数据
package com
.wzx
.lvyou
.util
;
import redis
.clients
.jedis
.Jedis
;
import redis
.clients
.jedis
.JedisPool
;
import redis
.clients
.jedis
.JedisPoolConfig
;
import java
.io
.IOException
;
import java
.io
.InputStream
;
import java
.util
.Properties
;
public final class JedisUtil {
private static JedisPool jedisPool
;
static {
InputStream is
= JedisPool
.class.getClassLoader().getResourceAsStream("jedis.properties");
Properties pro
= new Properties();
try {
pro
.load(is
);
} catch (IOException e
) {
e
.printStackTrace();
}
JedisPoolConfig config
= new JedisPoolConfig();
config
.setMaxTotal(Integer
.parseInt(pro
.getProperty("maxTotal")));
config
.setMaxIdle(Integer
.parseInt(pro
.getProperty("maxIdle")));
jedisPool
= new JedisPool(config
, pro
.getProperty("host"), Integer
.parseInt(pro
.getProperty("port")));
}
public static Jedis
getJedis() {
return jedisPool
.getResource();
}
public static void close(Jedis jedis
) {
if (jedis
!= null
) {
jedis
.close();
}
}
}
jedis.properties
host
=192.168.21.101
port
=6379
maxTotal
=100
maxIdle
=10
CategoryServlet使用redis
protected void
doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
Jedis jedis
= JedisUtil
.getJedis();
String json
= jedis
.get("category_list");
if (json
!= null
) {
System
.out
.println("redis cache");
response
.getWriter().println(json
);
} else {
System
.out
.println("mysql data");
CategoryService categoryService
= new CategoryService();
List
<Category
> categoryList
=categoryService
.findAll();
ResponseInfo info
= new ResponseInfo();
info
.setCode(200);
info
.setData(categoryList
);
json
= new ObjectMapper().writeValueAsString(info
);
jedis
.set("category_list",json
);
response
.getWriter().println(json
);
}
JedisUtil
.close(jedis
);
}