一、 NOSQL概述
1.1 什么是NOSQL
- NOSQL: 泛指菲关系型数据库(数据存储时,数据与数据之间没有任何的关联关系,数据存内存)
1.2 主流的NOSQL产品
- redis
- CouchDB
- mongoDb
- Cassandra
1.3 NOSQL作用
- 解决三高问题:
- 高并发:吞吐量大
- 高负载(高存储) :具有非常高的读写性能。
- 高扩展(高可用):在不太影响性能的情况下,就可以方便的实现高可用的架构。
二、 Redis概述
2.1 什么是Redis
- 是用C语言 开发的一个开源的高性能键值对(key-value)数据库
- 读的速度 110000次/秒
- 写的速度 81000次/秒
2.2 数据结构
- 字符串类型 String
- 散列类型 hash
- 列表类型 list(有序可重复)
- 集合类型 set(无序不可重复)
- 有序集合类型 sortedset(有序不可重复)
2.3 redis的应用场景
- 缓存(数据查询,短连接,新闻内容,商品内容等)
- 聊天室的在线好友列表
- 任务队列
- 应用排行榜
- 网站访问统计
- 数据过期处理(可以精确到毫秒)
- 分布式集群架构中的session分离
三、 Redis的安装和使用
3.1 安装
解压缩即可!
3.2 redis启动和关闭
- 启动:
- 方式一 :
-
- 启动服务器:双击 redis-server.exe 文件
-
- 启动客户端:双击 redis-cli.exe 文件
- 方式二:使用指定配置文件开启服务(会持久化)
-
- 在dos命令中输入redis-server.exe redis.windows.conf
-
- 启动客户端:在dos命令中输入redis-cli-exe
- 关闭:
- 方式一:点击X号
- 方式二:正常关闭,在dos命令中输入redis-cli.exe shutdown
四 、 Redis的数据类型
4.1 Redis的五种数据类型
- 字符串(String)
- 哈希(hash)
- 字符串列表(list)
- 字符串集合(set)
- 有序字符串结合(sorted set)
4.2 String类型的常用命令
- set key value :设置键值对
- get key : 获取值
- del key:删除健值
4.3 哈希类型hash
- Redis中的Hash类型可以看成具有String Key和String Value的map容器。
- 每一个Hash可以存储4294967295(约43亿)个键值对。
4.3.1 常用命令
- hset key field value: 为指定的key设定field/value对(键值对)
- hget key field: 返回指定的key中的field的值
- hdel key field [field…] :可以删除一个或多个字段,返回值是被删除的字段个数。
4.4 列表类型list
- 列表类型是按照插入顺序排序的字符串链表,和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加心元素。
4.4.1 常用命令
- lpush key values[value1,value2…]:在头部插入values,如果key不存在,则创建一个与该key关联的空链表;插入成功,返回元素个数。
- lpop key: 弹出指定key关联的第一个元素,即头元素
- rpop key: 从尾部弹出元素
4.5 集合类型set
4.5.1 常用命令
- sadd key values[value1,value2…]: 向set中添加数据,如果key值已有,则不会重复添加。
- senmbers key: 获取set中所有的成员。
- srem key members[member1,member]: 删除set中指定的成员。
五、 Redis的通用命令
keys pattern : 获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意一个字
符。
- del key1 key2… : 删除指定的key
- type key : 获取指定key的类型。以字符串的格式返回。
六 、 Redis的持久化
- 持久化: 将数据保存到硬盘中
6.1 RDB持久化机制(默认)
- RDB方式在持久化数据时,采用快照机制。
6.1.2 RDB方式数据持久化时机:
关键字 | 时间(秒) | key修改数量 | 解释 |
---|---|---|---|
save | 900 | 1 | 每900秒(15分钟)至少有1个key发生变化,则dump内存快照 |
save | 300 | 10 | 每300秒(5分钟)至少有10个key发生变化,则dump内存快照 |
save | 60 | 10000 | 每60秒(1分钟)至少有10000个key发生变化,则dump内存快照 |
6.1.3 存在的问题
- 可能导致数据丢失
6.2 AOF持久化机制
6.2.1 使用方式
1.开启AOF持久化(修改配置文件)
将配置文件中的 appendonly 改为 yes
appendfsync always (我们使用的)
# appendfsync everysec
# appendfsync no
6.2.1 特点
- 不会导致数据丢失
- 性能低
七 jedis的使用
7.1 基本使用
- 代码:
public static void main(String[] args) {
//通过jedis操作redis数据库
//1.创建Jedis对象
Jedis jedis = new Jedis();
//2.操作redis
jedis.set("name","Saber");//设置值
//jedis.del("name"); 删除
String name = jedis.get("name");//得到值
System.out.println(name);
//3.关闭
jedis.close();
}
7.2 jedis连接池的创建
- 代码:
public class JedisPoolDemo {
public static void main(String[] args) {
// 使用连接池获取jedis对象
//1.设置连接池的配置信息
JedisPoolConfig config = new JedisPoolConfig();
// 设置最大连接数量
config.setMaxTotal(30);
// 设置最大空闲数量
config.setMaxIdle(10);
//2.根据配置信息创建连接池对象
JedisPool pool = new JedisPool(config, "localhost", 6379);
//---------------------------------创建连接池的方式
//3.从连接池中获取连接对象
Jedis jedis = pool.getResource();
jedis.set("name","狗蛋儿");
String name = jedis.get("name");
System.out.println(name);
//4.关闭连接
jedis.close();
}
}
7.4 jedis工具类的创建
- 代码:
package com.itheima.b_pool;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ResourceBundle;
public class JedisUtils {
private static JedisPool pool;
static {
// 读取properties配置文件中的信息
ResourceBundle bundle = ResourceBundle.getBundle("Jedis");
// 获取配置文件中的信息
int maxTotal = Integer.parseInt(bundle.getString("maxTotal"));
int maxIdle = Integer.parseInt(bundle.getString("maxIdle"));
String host = bundle.getString("host");
int port = Integer.parseInt(bundle.getString("port"));
// System.out.println(maxIdle+" : "+maxTotal+" : "+host+" : "+port);
// 使用连接池获取jedis对象
//1.设置连接池的配置信息
JedisPoolConfig config = new JedisPoolConfig();
// 设置最大连接数量
config.setMaxTotal(maxTotal);
// 设置最大空闲数量
config.setMaxIdle(maxIdle);
//2.根据配置信息创建连接池对象
pool = new JedisPool(config, host, port);
}
// 1.从连接池中获取连接的方法
public static Jedis getJedis(){
// 从连接池中取连接
return pool.getResource();
}
// 2.关闭连接的方法
public static void closeJedis(Jedis jedis){
if(jedis!=null){
jedis.close();
}
}
}
- properties配置文件信息
maxTotal=30
maxIdle=10
host=localhost
port=6379 - 测试类
package com.itheima.b_pool;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class JedisUtilsTest {
@Test
public void testJedisPool(){
Jedis jedis = JedisUtils.getJedis();
String name = jedis.get("name");
System.out.println(name);
JedisUtils.closeJedis(jedis);
}
}