D33-Redis

一、 NOSQL概述

1.1 什么是NOSQL

  • NOSQL: 泛指菲关系型数据库(数据存储时,数据与数据之间没有任何的关联关系,数据存内存)

1.2 主流的NOSQL产品

  1. redis
  2. CouchDB
  3. mongoDb
  4. 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
      D33-Redis_第1张图片

四 、 Redis的数据类型

4.1 Redis的五种数据类型

  • 字符串(String)
  • 哈希(hash)
  • 字符串列表(list)
  • 字符串集合(set)
  • 有序字符串结合(sorted set)

4.2 String类型的常用命令

  • set key value :设置键值对
  • get key : 获取值
  • del key:删除健值
    D33-Redis_第2张图片

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…] :可以删除一个或多个字段,返回值是被删除的字段个数。

D33-Redis_第3张图片

4.4 列表类型list

  • 列表类型是按照插入顺序排序的字符串链表,和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加心元素。

4.4.1 常用命令

  • lpush key values[value1,value2…]:在头部插入values,如果key不存在,则创建一个与该key关联的空链表;插入成功,返回元素个数。
  • lpop key: 弹出指定key关联的第一个元素,即头元素
  • rpop key: 从尾部弹出元素

D33-Redis_第4张图片

4.5 集合类型set

4.5.1 常用命令

  • sadd key values[value1,value2…]: 向set中添加数据,如果key值已有,则不会重复添加。
  • senmbers key: 获取set中所有的成员。
  • srem key members[member1,member]: 删除set中指定的成员。

D33-Redis_第5张图片

五、 Redis的通用命令

keys pattern : 获取所有与pattern匹配的key,返回所有与该key匹配的keys。*表示任意一个或多个字符,?表示任意一个字
符。

  • del key1 key2… : 删除指定的key
  • type key : 获取指定key的类型。以字符串的格式返回。
    D33-Redis_第6张图片

六 、 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);
        }
}

你可能感兴趣的:(数据库)