Redis、Redis持久化、Jedis详解

Redis

将一些常用的且不常改变且不敏感的数据放入redis(缓存).可以减少和关系型数据库的交互.提供程序的效率 。

1 NoSql

NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。

互联网特点:高并发、高性能、高可用、海量数据

传统的关系数据库就出现了性能和扩展的瓶颈,非关系型数据库应时而生,解决了互联网三高和海量数据的问题
NoSQL和关系型数据库是互补关系,在各自的应用场景都有自己特点,一般情况下我们使用关系数据库来持久化数据,对一切热点数据通过Nosql来作为缓存。

主流产品

在这里插入图片描述

Redis介绍

Redis(Remote Dictionary Server)是用C语言开发的一个开源的高性能键值对数据库。它的所有数据都是保存在内存中的,这也就决定了其读写速度之快,是其它硬盘保存数据的系统所无法匹敌的。
官方曾经给出过一组测试数据,50个并发执行100000个请求: 读的速度是110000次/s,写的速度是81000次/s。

Redis安装和使用

  • 下载
    Reids官网地址:http://redis.io
    中文网地址:https://www.redis.net.cn/
  • 安装
    windows版本解压缩即可
  • 目录(windows版)
    redis.windows.conf:配置文件
    redis-cli.exe:redis的客户端
    redis-server.exe:redis服务器端
    在这里插入图片描述
  • 启动
    • 方式1 :
      • 先双击服务器端 redis-server.exe
      • 再双击客户端 redis-cli.exe
    • 方式2:在当前解压后的目录下 cmd进入dos窗口
      • 先启动服务器端 redis-server.exe redis.windows.conf
      • 再启动客户端 redis-cli.exe
        redis服务器默认的端口号:6379
  • 关闭
    • 建议在客户端使用:shutdown
    • 也可以直接点 x

Redis数据结构(重点)

redis存储的是:key-value格式的数据,其中key是字符串类型,value支持五种数据类型(存储在库中的都是字符串)
1.string
2.hash(map)
3.list(linkedlist)
4.set(无序唯一)
5.zset(sorted set 有序set)
在这里插入图片描述

Redis命令操作

1 字符串(string)

添加:set 键名 值
查询:get 键名
删除:del 键名
新增且设置时间:setex 键名 秒数 值
查看剩余存活时间:ttl 键名

  • 若为-1:永不过时
  • 若为正整数:代表剩余时间
  • 若为-2:已经销毁了

在这里插入图片描述
扩展:

  • incr 键名:自增
  • decr 键名:自减
    在这里插入图片描述
2 哈希(hash)

value是一个map
添加:hset 键名 子键 子值
查询:hget 键名 子键
删除:hdel 键名 子键
在这里插入图片描述
扩展命令:

  • hmset 键名 子键1 子值1 子键2 子值2:即一次性设置多个子键值
  • hmget 键名 子键1 子键2:一次获取多个子值
  • hgetall 键名:获取所有子键和子值
    在这里插入图片描述
3 列表(list)

LinkedList有序
添加:

  • lpush 键名 值1 值2 值3 …从左开始一个个往前面加
  • rpush 键名 值1 值2 值3 …从右开始一个个往末尾加

查询:

  • lrange 键名 开始索引 结束索引
  • lrange 键名 0 -1:查询所有

删除:

  • lpop 键名:返回且移除左边第一个元素
  • rpop键名:返回且移除右边第一个元素
    扩展:
  • lien 键名:获取集合长度
    在这里插入图片描述
4 集合(set)

唯一无序
添加:sadd 键名 值1 值2 值3
删除:srem 键名 值1 值2
查询

  • smembers 键名:查询所有
  • sismember 键名 值:判断该值是否存在 (0:不存在,1:存在)
    在这里插入图片描述
    扩展命令:
  • 长度 : scard 键名
  • 集合运算 :
    • sunion 键1 键2 :并集 我有加你有
    • sdiff 键1 键2 :差集 我有你没有
    • sinter 键1 键2 :交集 我有你也有
    • 也可以将他们的运行结果放入一个新集合中
      • sxxxstore 新集合 键1 键2
      • 例如: sunionstore s3 s1 s2 将s1和s2的并集放入s3中
        在这里插入图片描述
5 有序集合(zset)

添加:zadd 键名 分数1 值1 分数2 值2
查询:zrange 键名 开始索引 结束索引 [withscores]
查询某一个键的分数:zscore 键名 值
删除:zren 键名 值1 值2
在这里插入图片描述

通用命令
  • del 键名 : 删除指定key
  • keys * :查询当去数据库下所有的key
  • type 键名 : 查询该键的类型
  • exists 键名 : 查询该键是否存在当前的数据库中
  • 扩展命令:
    • 一个redis实例包含16个数据库,默认使用的索引为0的数据库 : select 索引
      • 建议大家开发项目的时候 一个项目用一个实例
    • flushdb : 清除当前数据库中所有的内容
    • flushall : 清除当前实例中所有数据库中的内容
      在这里插入图片描述
      在这里插入图片描述

Redis持久化(RDB和AOF)

Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。Redis支持两种方式的持久化(RDB和AOF),可以同时使用。

  • RDB(快照方式):默认方式.
    采用快照的形式以二进制的方式将数据保存在文件中,将文件名称:dump.rdb
    redis安装目录的etc目录下,编辑redis.conf

rdb默认的快照规则:
save 900 1 当15分钟之内有1个key发生变化就拍照
save 300 10 当300秒之内有10个key发生变化就拍照
save 60 10000 当60秒之内有1w个key发生变化就拍照

重启服务器后,默认是从rdb文件中恢复数据到内存中
由于RDB并不能做到实时备份,假如服务器宕机,容易导致数据丢失,于是就有了AOF方式的持久化。

  • AOF(追加命令到文件中) 需要在redis.conf中进行配置。追加数据的文件名称为:appendonly.aof
# appendfsync always	每执行一个命令,就会把命令追加到文件中,和关系型数据库相似
appendfsync everysec	每一秒钟,把所有的操作命令追加到文件中
# appendfsync no		不同步,等同于rdb

启动的时候需要指定配置文件启动
改配置文件redis.windows.conf中 appendonly no 将他的值改成yes,重启服务器就生效,
虽然开启了aof,但是rdb依然能用.只不过是,当服务器重启的时候,从aof文件将数据恢复到内存中.
若需要使用aof方式的话,得使用指定配置文件的方式启动redis服务器

在这里插入图片描述
当我们正常关闭redis服务器的时候,他会通过不同的方式将内存中的数据保存到硬盘文件中.再次启动的时候,会去文件中把数据恢复到内存中。
若我们把redis作为缓存使用,建议使用rdb方式,高效; 若数据需要不时的持久化,建议使用aof方式。
缓存是允许有数据丢失。

Redis客户端安装和使用

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

Jedis简介

Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、
Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis ,github下载地址:https://github.com/xetorthio/jedis
jedis对redis 相当于 jdbc对关系型数据库

快速入门

步骤分析

  1. 导入jedis依赖
  2. 创建一个Jedis对象(连接对象)
    • new Jedis(String host,int port)
  3. 执行jedis中方法(发送命令)
  4. 释放资源

常用Api
在这里插入图片描述

<!--jedis-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
</dependency>
@Test
public void testHelloJedis(){
    Jedis jedis = new Jedis("127.0.0.1", 6379);
    jedis.set("jedis","hello");
    String value = jedis.get("jedis");
    System.out.println("jedis对应的值"+value);//hello
    System.out.println("tom对应的值"+jedis.get("tom") );//null
    jedis.close();
}

连接池

jedis连接资源的创建与销毁是很消耗程序性能,所以jedis为我们提供了jedis的池化技术

步骤分析

  1. 创建连接池的配置对象JedisPoolConfing,给连接池配置一些信息
  2. 使用指定的配置再创建jedis连接池的JedisPool对象
  3. 从pool中获取jedis
  4. 使用jedis
  5. 使用完成后别忘记归还jedis

jedis.properties

host=127.0.0.1
port=6379
##最大连接数
maxTotal=50 
##最大空闲连接数 
maxIdle=10 

JedisUtils

public class JedisUtils {
    private static JedisPool pool;
    //使用静态代码块初始化pool
    static{
        //加载配置文件
        /*
        //之前的方式
        InputStream is = JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        Properties prop = new Properties();
        prop.load(is);
        */

        //换种方式
        ResourceBundle bundle = ResourceBundle.getBundle("jedis");//直接加载到properties配置文件.
        //创建pool配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        //设置最大连接数
        config.setMaxTotal(Integer.parseInt(bundle.getString("maxTotal")));
        //设置最大空闲连接数
        config.setMaxIdle(Integer.parseInt(bundle.getString("maxIdle")));
        //初始化pool对象
        pool = new JedisPool(config,bundle.getString("host"),Integer.parseInt(bundle.getString("port")));
    }

    //提供一个获取jedis方法
    public static Jedis getResource(){
        return pool.getResource();
    }

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

有个RedisInsight的工具,是Redis官方出品的关于Redis的可视化工具。可用于设计开发。大家有兴趣可以看一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值