NOSQL数据库——Redis

NOSQL数据库——Redis

学习概要

Nosql的概念

Redis的概念

Redis的功能

Redis的操作命令

Redis的应用场景

Redis持久化机制

Jedis对Redis的操作

一.NOSQL的概念

1.1什么是nosql

nosql(Not Only SQL),泛指非关系型数据库,区别于关系型数据库,它们不保证关系数据的ACID特性。

非关系型数据库:Redis 缓存数据库

关系型数据库:MySql Oracle

1.2 nosql的优点

1.2.1. 能应对数据库高并发读写

1.2.2. 能对海量数据的高效率存储和访问

1.2.3. 能应对对数据库的高可扩展和高可用

二.Redis的概述

2.1 什么是Redis

​ redis是用C语言开发的一个基于内存,可持久化的(key-value)键值对存储系统。可提供字符串类型 String(json),散列类型Hash(key value key-value(map)),列表类型(list),集合类型(set),有序集合类型(zset)等丰富的数据类型,支持不同场景下的存储需求。

2.2 Redis的特性

​ --提供多种数据类型存储(String,list,set,hash,zset)

​ --以内存作为数据存储,读写速度快。

​ --提供了RDB、AOF两种持久化方式

​ --应用场景多样:缓存,队列,消息订阅/发布

​ --支持主从模式,可配置集群,高可用。

三.Redis的应用场景

​ Redis数据交换快,在服务器中常用来存储一些操作比较频繁的数据,节省内存开销,也提升了速度。

​ 1、缓存(数据查询,新闻内容,商品内容。最常用)

​ 2、商品列表,在线好友列表,评论列表

​ 3、任务队列(RabbitMQ(秒杀,抢购))

​ 4、排行榜

​ 5、网站访问统计,计数

​ 6、数据过期处理

Redis的数据类型以及相应的应用场景

​ String(字符串):Redis最基本的数据类型,二进制保存。常规key-value缓存应用。常规计数:微博粉丝数。

​ Hash(哈希类型):key(用户ID),value是一个map集合,map的key是属性名,value是属性值。适用于存储对象,用户信息等。

​ List(列表类型):按照插入顺序排序的字符串链表,可在头部(left)和尾部(right)添加新元素。常用来如:微博的关注列表,访客列表。也可以实现最新消息 排行。

​ Set(集合类型):没有排序的字符集合,不允许出现重复的元素。

​ ZSet(有序集合):有序集合,也不可重复。有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序。

四、Redis常规命令

  1. keys pattern 获取匹配的建名列表
  2. del key1 key2… 删除指定key
  3. exists key 判断是否存在,1代表存在,0代表不存在
  4. type key 获取指定key的类型,如果不存在返回none
  5. monitor # 实时监控
  6. config get # 获得服务配置

五、Redis两种持久化机制

Redis持久化机制有两种:AOF(仅附加文件),RDB(快照)

仅附加文件(AOF):AOF持久化机制下,保存数据到文件(appendonly.aof)中

appendfilename “appendonly.aof”

参数说明:

​ appendonly yes 开启AOF持久化机制

​ appendsync always 总是进行持久化

​ appendsync everysec 每秒进行持久化

​ appendsync no 不进行持久化

优点:数据安全性较高,不会丢失数据

缺点:IO操作较多,影响性能

快照(RDB):RDB持久化机制下,保存数据到文件(dump.rdb)中

appendfilename “dump.rdb”

参数说明:

​ save 900 1 如果15分钟内1条数据发生变化,则启动快照保存

​ save 300 10 如果5分钟内超过10条数据变化,则启动快照保存

​ save 60 1000 如果1分钟内超过10000条数据发生变化,则启动快照保存

优点:IO操作较少,性能较高

缺点:数据的安全性较低,容易丢失数据

六、Jedis对Redis的操作

6.1 jedis的基本操作
public class jedisTest {
    public static void main(String[] args) {
        //1.获取redis的连接对象   Jedis
        Jedis jedis = new Jedis("localhost", 6379);
        //2.jedis操作redis数据库
        //jedis操作String类型
//        jedis.set("username","kobe");
//        String username = jedis.get("username");
//        System.out.println(username);
        //jedis操作hash类型
        jedis.hset("LBJ", "age", "35");
        String hget = jedis.hget("LBJ", "age");
        System.out.println(hget);

        //3.应用场景:保存验证码
        jedis.setex("code",90,"8888");

        //4.释放资源
        jedis.close();

    }
}
6.2 Jedis连接池的基本用法
public class jedisPoolTest {
    public static void main(String[] args) {
        //1.创建一个连接池的配置信息对象
        JedisPoolConfig config = new JedisPoolConfig();

        //2.设置连接池的参数
        config.setMaxTotal(10);
        config.setMaxIdle(5);
        //3.通过配置创建连接池对象
        JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
        //4.从连接池获取连接对象
        Jedis jedis = jedisPool.getResource();
        //5.操作redis数据库
        String username = jedis.get("username");
        System.out.println(username);
        //6.释放回连接池
        jedis.close();


    }
}
6.3 jedis连接池工具类
public class jedisUtils {
    private static String host = null;
    private static int port = 0;
    private static int maxIdle = 0;
    private static int maxTotle = 0;
    private static JedisPool pool = null;
    //1.static代码块加载配置文件信息
    static{
        //专门用来获取classpath下的properties配置文件的
        ResourceBundle rb = ResourceBundle.getBundle("jedis");
        //获取配置文件中的参数
        maxTotle = Integer.parseInt(rb.getString("maxTotle"));
        maxIdle = Integer.parseInt(rb.getString("maxIdle"));
        port = Integer.parseInt(rb.getString("port"));
        host = rb.getString("host");

        //2.创建连接池配置信息对象
        JedisPoolConfig config = new JedisPoolConfig();
        //3.设置配置参数
        config.setMaxTotal(maxTotle);
        config.setMaxIdle(maxIdle);
        //4.创建连接池对象
        pool = new JedisPool(config,host,port);
    }
    //5.提供获取连接对象的方法
    public static Jedis getJedis(){
        return pool.getResource();
    }

    public static void main(String[] args){
        Jedis jedis = getJedis();
        String username = jedis.get("username");
        System.out.println(username);
        jedis.close();
        
    }
}

jedis.properties编写配置文件

maxTotle = 10
maxIdle = 4
host = localhost
port = 6379
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值