Redis

2022-01-24  本文已影响0人  bowen_wu

概述

操作系统基本原理

  1. CPU 是时钟驱动的,基本执行单位是指令
  2. 指令来自程序的代码段
  3. CPU 读取程序的代码段,挨个执行指令
    • 可以从内存和寄存器交换数据
    • 可以执行计算
    • 可以跳转
  4. 某一个时刻只有一个进程或线程占有 CPU,执行指令

当上下文切换发生时

CPU 需要:

  1. 保存现场 => 正在执行的任务的所有寄存器
  2. 恢复现场 => 即将被执行的任务的所有寄存器

上下文切换有多慢: 切换上下文需要数千个时钟周期

Redis 为什么这么快

IO 多路复用机制

IO 模型

多路 IO

数据结构

Structure Type What is contained
String String, Integers, or floating-point values
List Linked list of strings
Set Unordered collection of unique strings
Hash Unordered hash table of keys to values(Java HashMap, key-value must be a string)
ZSet(sorted set) Ordered mapping of string members to floating-point scores, ordered by score(有序的集合, TreeSet)

Spring Boot Redis

  1. 创建 RedisTemplate
  2. @Autowired RedisTemplate

Redis 存在最大的意义在于在多个机器分布式集群中共享数据

Java Object 序列化 => 字节流 => java.io.Serializable

在 Spring Boot 中使用 Redis

  1. docker 启动 Redis 服务
  2. 配置 Redis Spring Boot starter
  3. 在 Spring 中配置 Redis
    spring.redis.host=localhost // 本机
    spring.redis.port=6379
    
  4. 配置 Redis Template
    @Configuration
    public class ApplicationConfig {
        @Bean
        RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            return redisTemplate;
        }
    }
    
    注意
  5. 在使用的地方注入即可

知识点

  1. 阻塞 vs 死循环
    • 阻塞 => 不占用 CPU
    • 死循环 => 占用 CPU 100%
  2. Java 中一个线程大约占用 1M - 4M 的内存 => 一个 JVM 中最多就开几千个线程
  3. // TODO: bitmap
上一篇下一篇

猜你喜欢

热点阅读