Redis基础知识入门

Redis基础知识入门,第1张

Redis基础知识入门 Redis快速入门

博主关于Redis高级特性的一些讲解,传送地址如下:

删除策略与淘汰策略详解

主从复制详解

哨兵模式详解

集群详解

缓存预热 & 缓存雪崩 & 缓存击穿 & 缓存穿透

五大数据类型的应用场景

事务

布隆过滤器详解

文章目录
  • Redis快速入门
    • 一、Redis概述
    • 二、Redis应用场景
    • 三、Redis的下载和安装
    • 四、Redis服务的启动
    • 五、Redis命令行工具
    • 六、Redis基础知识
    • 七、Redis数据类型
      • 1. key (键)
      • 2. String (字符串)
      • 3. List (列表)
      • 4. Set (集合)
      • 5. Zset (有序集合)
      • 6. Hash (哈希)
    • 八、Redis常用查询指令
    • 九、Jedis的使用
    • 十、Redis可视化工具
    • 十一、持久化概念
    • 十二、RDB
    • 十三、AOF
    • 十四、AOF重写
    • 十五、RDB与AOF的选择

一、Redis概述
  1. 概念

Redis是用C语言开发的一个开源的高性能基于内存运行的键值对NoSQL数据库

  1. 特征

(1) 支持数据的持久化,可以将数据保存在磁盘中,重启之后可以再次加载到内存中使用
(2) 支持多种数据类型,除了KV类型的数据,还支持list、set、hash等数据结构
(3) 支持master-slave模式的数据备份

二、Redis应用场景
  1. 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
  2. 即时信息查询,如公交到站信息、在线人数信息等
  3. 时效性信息控制,如验证码控制、投票控制等
  4. 分布式数据共享,如分布式集群架构中的session分离消息队列
三、Redis的下载和安装
  1. 去官网下载redis-3.0.4.tar.gz安装包,并放入Linux中的/opt目录
  2. 在/opt目录下,执行解压命令tar -zxvf redis-3.0.4.tar.gz
  3. 解压完成后出现文件夹redis-3.0.4
  4. 进入文件夹redis-3.0.4,在此目录下执行make && make install命令
  5. 进入默认安装目录cd /usr/local/bin,此目录中有如下文件

四、Redis服务的启动
  1. 修改redis配置文件,vim /opt/redis-3.0.4/redis.conf

  1. 启动redis服务,cd /usr/local/bin,执行redis-server /opt/redis-3.0.4/redis.conf

  2. 查看服务是否启动,ps aux | grep redis-server

五、Redis命令行工具

六、Redis基础知识
  1. Redis采用单线程机制进行工作

  2. Redis默认拥有16个数据库,数据库编号从0开始,默认使用0号数据库

  3. 使用select 数据库编号 可以切换使用的数据库

  4. dbsize 命令查看当前数据库key的数量

  5. keys * 命令查看当前数据库所有的key

  6. flushdb 命令清空当前数据库

  7. flushall 命令清空所有数据库

  8. Redis中所有数据库使用同一个密码,默认没有密码,Redis认为安全层面应该由Linux来保证

  9. Redis中所有索引都是从0开始

  10. Redis默认端口是6379

七、Redis数据类型 1. key (键)


Redis有五大数据类型:String、List、Set、Zset、Hash

注意:Redis采用键值对存储数据,key永远是String类型,五大数据类型指的是value部分
2. String (字符串)

一个key对应一个value;String可以包含任何数据,比如jpg图片等;String是Redis最基本的 数据类型,一个String的value最大可支持512M


3. List (列表)

底层是一个字符串链表;可以从头或尾添加元素

注意:

(1) 添加元素时:

如果key不存在,创建新的链表
如果key已存在,添加内容
如果key的所有值全部删除,则对应的key也会随之消失

(2) 在链表的头尾 *** 作时效率较高,但是对中间元素的 *** 作效率较低


4. Set (集合)

底层通过HashTable实现;是String类型的无重复值的无序集合


5. Zset (有序集合)

类似Set;每个元素都会关联一个double类型的分数(score);Redis通过分数自动的为集合中的 成员进行从小到大的排序;成员不可重复,分数可以重复

6. Hash (哈希)

类似Java中的Map;是一个键值对集合;适合存储对象

  1. 单指令与多指令的选择

对于set与mset两个指令,应该使用哪一个由具体的业务场景决定

(1) set指令的执行过程

set指令发送给Redis服务器需要一个网络时间;Redis服务器执行该指令需要一个处理时间; Redis服务器将结果返回需要一个网络时间;故需要2个网络时间 + 1个处理时间

(2) 使用set存储n个值

n个网络时间(发送) + n个处理时间(处理) + n个网络时间(返回)

(3) 使用mset存储n个值

1个网络时间(发送) + n个处理时间(处理) + 1个网络时间(返回)

注:每次携带的数据增多,网络时间会相应的延长

综上所述,当需要处理的数据较少时,使用单指令;当处理的数据较多时,使用多指令

八、Redis常用查询指令

九、Jedis的使用
  1. 首先需要在redis.conf配置文件中修改配置,需要重启Redis服务方可生效

  1. 修改之后,必须指定绑定的主机地址方可使用Redis

  2. 开放6379端口

  1. 创建Java项目并导入jar包

  1. src目录下创建redis.properties配置文件
#最大连接数
redis.maxTotal=50
#默认开启的活跃连接数
redis.maxIdel=10
#Linux的ip地址
redis.host=192.168.200.130
#redis的端口号
redis.port=6379

  1. 创建Jedis的工具类JedisUtils
public class JedisUtils {

    // 将从配置文件读取的配置信息赋予如下变量
    private static int maxTotal;
    private static int maxIdel;
    private static String host;
    private static int port; // 端口号为int类型

    // Jedis的连接池配置
    private static JedisPoolConfig jedisPoolConfig;

    // Jedis连接池
    private static JedisPool jedisPool;

    static {
        // 读取redis.properties配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("redis");
        maxTotal = Integer.parseInt(bundle.getString("redis.maxTotal"));
        maxIdel = Integer.parseInt(bundle.getString("redis.maxIdel"));
        host = bundle.getString("redis.host");
        port = Integer.parseInt(bundle.getString("redis.port"));

        // Jedis连接池配置
        jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(maxTotal);
        jedisPoolConfig.setMaxIdle(maxIdel);
        jedisPool = new JedisPool(jedisPoolConfig, host, port);
    }

    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

  1. 创建测试类JedisTest
public class JedisTest {
    public static void main(String[] args) {
        // 1. 获取Jedis对象
        Jedis jedis = JedisUtils.getJedis();

        // 2. 执行 *** 作,Jedis中 *** 作的方法名与Linux中命令行工具中的指令同名
        jedis.sadd("key1", "abc", "abc", "def");
        Long key1 = jedis.scard("key1");
        System.out.println("运行结果:" + key1);

        // 3.关闭连接
        jedis.close();
    }
}

  1. Linux中进行测试
十、Redis可视化工具
  1. 安装软件

  2. 运行软件

十一、持久化概念
  1. 意外断电或重启之后,内存中的数据将会丢失,故应当将内存中的数据保存在磁盘中

  2. 概念

利用磁盘等将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化

  1. 持久化的两种方式

(1) 快照

将某个时间点的工作状态保存下来,恢复时可直接恢复指定时间点的工作状态

Redis中这种方式称为RDB

(2) 日志

将对数据的所有 *** 作过程记录下来,恢复数据时重新执行这些 *** 作

Redis中这种方式称为AOF

十二、RDB
  1. 对redis.conf配置文件进行修改 (修改配置文件后需要重启Redis)

(1) 修改内存中数据保存的文件的名称,默认值为dump.rdb

(2) 修改rdb文件保存的目录

  1. 执行save指令即可将内存中的数据保存到/opt/redis-3.0.4/目录的dump.rdb文件中

  2. 再次启动redis服务即可自动读取rdb文件中的数据并加载到内存

  3. save指令工作原理

Redis是单线程的,故执行save指令会阻塞其之后的命令的执行(可能多人 *** 作同一个Redis 服务器),如果要保存的数据较多时,会导致之后的命令长时间阻塞,故一般不使用save指令

  1. bgsave指令可以让保存 *** 作在后台执行,让redis服务可以继续执行其之后的指令,使用较多

  2. bgsave指令工作原理

  3. 配置自动保存 (修改配置文件后需要重启Redis)

  1. 自动保存方式的注意点

(1) get *** 作没有导致key发生变化
(2) 对存在的key修改才算发生变化
(3) set k1 v1,set k1 v1认为key的值发生变化
(4) 配置方式执行的是bgsave指令

  1. RDB两种指令的对比

十三、AOF
  1. RDB缺点

(1) 基于快照思想,每次读写都是全部数据,当数据量较大时,效率非常低
(2) 基于fork创建子进程,内存产生额外的消耗
(3) 宕机带来数据丢失风险(可能某个时间点的数据未保存)

  1. AOF概念

以日志的方式记录每次 *** 作的命令,重启之后执行AOF中保存的命令恢复数据,较为主流

  1. 对redis.conf配置文件进行修改 (修改配置文件后需要重启Redis)

  1. AOF执行策略

(1) everysec (每秒)

每秒将缓冲区的指令写入aof文件中,宕机会丢失0-1秒的数据,性能高,建议使用

(2) always (每次)

每次执行指令都将其写入aof文件中,数据零失误,性能较低,不建议使用

(3) no (系统控制)

由 *** 作系统控制写入aof文件的时间,不建议使用

注意:i. 只有使得key变化的指令才记录
ii. 重启之后自动从aof文件中读取指令并执行
iii. select指令虽然没有对key进行修改,但仍需记录,以知道数据存储的位置

十四、AOF重写
  1. 概念

AOF文件中已经记录的对同一数据的若干条 *** 作的记录转换为数据最终结果对应指令的记录

  1. AOF重写作用

  1. 为防止数据量过大导致缓冲区溢出,合并后的每条指令最多写入64个元素

  2. AOF重写方式

(1) 手动重写,执行bgrewriteaof指令

(2) 自动重写,修改配置文件

十五、RDB与AOF的选择
  1. 对比

  1. 选择策略

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5161507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存