Redis NOSQL Redis的五种常见的数据类型 redis持久化方式 Jedis

Posted halulu.me

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis NOSQL Redis的五种常见的数据类型 redis持久化方式 Jedis相关的知识,希望对你有一定的参考价值。

NOSQL

NOSQL(Not Only Sql) 不仅仅是sql, 泛指非关系型数据库

非关系型数据库里面有一个很重要类型数据库: 缓存数据库.

作用:应对基于海量用户和海量数据前提下的数据处理问题。

关系型数据库

优点:
是磁盘数据库,数据永久保存在磁盘上,所以数据安全

缺点:

​慢

​ 原因1: 磁盘数据库的续写是IO的读写

原因2: 关系型数据库有各种约束、检查、事务操作等逻辑控制

非关系型数据库

优点

快, 因为是内存的操作

缺点

数据不安全,会容易丢失部分数据

在这里插入图片描述

海量的访问先访问NOSql, NOsql中没有数,会访问mysql的数据写入到NOSql中, 海里的访问都会访问到NOSql中的数据

Redis的五种常见的数据类型

在这里插入图片描述

1、String

在这里插入图片描述
在这里插入图片描述

2、List

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、set

在这里插入图片描述

4、zset

在这里插入图片描述
在这里插入图片描述

5、hash

在这里插入图片描述

在这里插入图片描述

redis持久化方式

1、RDB策略

Redis DataBase(RDB) , 是redis的默认开启的持久化策略. 在符合持久化条件时会将这一时刻内存所有数据进行持久化到磁盘文件上dump.rdb, 由于持久化的是某一时刻所有内存数据又叫快照策略.

在这里插入图片描述

RDB默认规则:

如果有1个以上的key发生改变(增删改), 那么900秒(15分钟)持久化一次数据到dump.rdb文件中

如果有10个以上的key发生改变(增删改), 那么300秒(5分钟)持久化一次数据到dump.rdb文件中

如果有10000个以上的key发生改变(增删改), 那么60秒(1分钟)持久化一次数据到dump.rdb文件中

rdb策略的优点

持久化频率低, 所以redis的缓存性能不会受到影响

rdb策略的缺点?

由于持久化频率低, 导致数据丢失严重, 数据不安全

2、AOF策略

这个策略默认没有开启, 这个策略是每一秒将一秒内的增删改的命令持久化追加到appendonly.aof文件中

在这里插入图片描述

AOF策略的优点

持久化频率高了, 数据安全性高, 数据不易丢失, 最多丢失1秒内的数据

AOF缺点

持久化频率高了, redis的性能会受到影响, 如果持久化频率高会导致cpu的压力大

RDB和AOF以后到底推荐使用哪一个呢

如果希望数据安全性高,才开AOF,否则只建议使用RDB,因为AOF会降低redis的性能, 严重影响CPU(cpu超过60%都会选择关闭AOF)。注意AOF很影响redis的性能

Jedis

操作redis的java客户端

在这里插入图片描述

在这里插入图片描述

maven

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.9.0</version>
</dependency>

jedis.properties

# 最大连接数
maxTotal=10
# 最大超时时间
maxWaitMillis=30000
# 服务器的主机地址
host=localhost
# redis服务器的端口号
port=6379

获取Jedis的工具类

/**
 * 目标:对外提供Jedis的连接对象
 */
public class JedisUtils {

    //1.定义全局的连接池
    private static JedisPool jedisPool;

    //2.初始化连接池对象
    static {

        //使用ResourceBundle读取属性配置文件jedis.properties的数据
        //  介绍:ResourceBundle 译为“资源包”也可以解析properties文件数据
        //  创建资源包对象语法:ResourceBundle resourceBundle = ResourceBundle.getBundle(“文件名”)  根据类路径下的文件名读取
        //  读取数据的语法: String value = resourceBundle.getString("key")  根据key读取value

        //创建ResourceBundle资源包对象
        ResourceBundle resourceBundle = ResourceBundle.getBundle("jedis");
        //读取数据
        Integer maxTotal = Integer.valueOf(resourceBundle.getString("maxTotal"));
        Integer maxWaitMillis = Integer.valueOf(resourceBundle.getString("maxWaitMillis"));
        String host = resourceBundle.getString("host");
        Integer port = Integer.valueOf(resourceBundle.getString("port"));

        //创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(maxTotal); //最大连接数
        config.setMaxWaitMillis(maxWaitMillis); //3秒

        //创建连接池对象
        jedisPool = new JedisPool(config, host, port);
    }

    //3.对外提供共有的方法获取连接
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

ublic class JedisTesy2 {

    @Test
    public void test(){

        Jedis jedis = JedisUtil.getJedis();

        jedis.set("name","halulu");

        jedis.set("name","halulu加强版");

        String name = jedis.get("name");
        System.out.println("name = " + name);
        jedis.del("name");

        jedis.setex("name",300, "halulu逃生版");

        jedis.setnx("name","halulu");

        jedis.close();
    }
}

以上是关于Redis NOSQL Redis的五种常见的数据类型 redis持久化方式 Jedis的主要内容,如果未能解决你的问题,请参考以下文章

Redis入门到高可用—— Redis的五种数据结构的内部编码

redis的五种数据类型

redis的五种数据结构原理分析

Redis的五种对象类型及其底层实现

redis的五种数据结构

Redis 避不开的五种数据结构