Redis入门

179 阅读3分钟

Redis概述

Redis 是一个由C语言开发的高性能且开源的的 Nosql(非关系型数据库),数据可以存储在内存或磁盘中。Redis 是以 key-value 形式存储数据,和传统的关系型数据库不一样。redis严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

数据类型

Redis支持的数据结构类型有以下5种:

  • String: 字符串
  • List: 列表(有序可重复)
  • Set: 集合(无序不可重复)
  • Hash: 散列(value由map(key-value)形式存储 )
  • Sorted Set: 有序不重复集合

Redis的优势

  1. 数据保存在内存(存取速度快,并发能力强)
  2. 支持持久化,数据安全性高
  3. 支持多种数据类型的存储
  4. 补偿了memcached的不足,对关系型数据库起到很好的补充作用。
  5. 支持多种语言客户端
  6. Redis支持集群(支持高并发、海量数据)

Redis发布/订阅

订阅给定的一个或多个频道的信息

SUBSCRIBE channel1 channel2...

将信息 message 发送到指定的频道 channel

PUBLISH channel message

新开一个客户端订阅tv频道

image.png

再开一个客户端窗口,发布消息到tv频道

image.png

订阅tv频道的客户端可以收到nihao!消息

image.png


Jedis操作Redis

Jedis是java操作Redis的客户端之一,使用Jedis其实很简单。只需要将核心jar包(jedis-3.6.0.jar )以及依赖jar包导入,即可使用Jedis 注意:不同版本jedis.jar包可能会依赖不同jar包,需要将依赖的jar也一并导入

image.png

代码示例:Jedis中的方法与Redis命令操作基本一致,很容易上手

@Test
public void test2(){
    //创建jedis连接池配置对象
    JedisPoolConfig config = new JedisPoolConfig();
    //最大空闲数
    config.setMaxIdle(2);
    //最大连接数
    config.setMaxTotal(10);
    //创建连接超时
    config.setMaxWaitMillis(1*1000);
    //获取连接时测试连接是否畅通
    config.setTestOnBorrow(true);
    //创建连接池的核心对象
    JedisPool jedisPool = new JedisPool(config,"127.0.0.1",6379,1000,"admin");
    //获取jedis资源
    Jedis jedis = jedisPool.getResource();
    jedis.set("username","luobiao");
    String username = jedis.get("username");
    Set<String> keys = jedis.keys("*");
    for (String key : keys) {
        System.out.println(key);
    }
    System.out.println(username);
    jedis.close();

}

Redis持久化策略

Redis有两种持久化策略:

  1. RDB 策略(默认开启状态):原理是把数据存储到文件中
  2. AOF 策略:原理是记录Redis存储数据的命令到更新日志文件中,一旦启动Redis的时候,就会去加载该文件中的命令

两种策略的优缺点:

  • RDB:读取效率高,但是如果不满足它的持久化条件,数据很容易丢失
  • AOF:数据不容易丢失,读取效率相比RDB低很多
graph LR
id1[服务器启动] --> id2[执行载入程序]
-->condition{是否已开启AOF持久化}
condition-- 是 --> AOF[载入AOF文件]
condition-- 否 --> RDB[载入RDB文件]

Redis淘汰策略

当内存到一定极限的时候,需要淘汰一些数据,达到redis数据都是有效的。

Redis提供了以下6种淘汰策略:

  • volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
  • volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
  • volatile-random:从已设置过期时间的数据集任意选择数据淘汰。
  • allkeys-lru:从数据集中挑选最近最少使用的数据淘汰。
  • allkeys-random:从数据集中任意选择数据淘汰。
  • no-enviction(驱逐):禁止驱逐数据。