20.Redis缓存数据库

1.Redis概述

        Redis是一种NoSql(NoSQL,泛指非关系型的数据库)数据库,区别于关系数据库,它们不保证关系数据的ACID特性。

        Redis以内存为主要存储介质,通过将数据存储在内存中实现了快速的读写操作。同时,Redis也支持将数据持久化到磁盘,以保证数据的持久性。

1.1 Redis特点

高性能 Redis使用内存作为主要存储介质,可以实现快速的读写操作,适合处理高并发场景(读的速度是220000次/s,写的速度是162000次/s )
丰富的数据结构 Redis支持多种数据结构,适用于不同的数据存储和操作需求
持久化 Redis支持将数据持久化到磁盘,以保证数据的持久性
原子性 Redis的很多操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作通过事务或Lua脚本,通过MULTI和EXEC指令包起来,也能保证操作的原子性
分布式支持 Redis提供主从复制和哨兵机制,支持构建分布式系统,提高系统的可用性和可扩展性

1.2 Redis数据类型

        String(数字也存储为该类型)、List、Hash、Set、ZSet

1.3 Redis操作

字符串操作
SET key value 设置键值对 SET name "John"
GET key 获取指定键的值 GET name
DEL key 删除指定键 DEL name
INCR key 将键对应的值加1 INCR counter
APPEND key value 将值追加到指定键的值的末尾 APPEND message "Hello, world!"
列表操作
LPUSH key value 将值插入列表的头部 LPUSH list 1
RPUSH key value 将值插入列表的尾部 RPUSH list 2
LPOP key 移除并返回列表的第一个元素 LPOP list
RPOP key 移除并返回列表的最后一个元素 RPOP list
LRANGE key start stop 获取列表指定范围内的元素 LRANGE list 0 -1
哈希操作
HSET key field value 设置哈希表中指定字段的值 HSET user id 1
HGET key field 获取哈希表中指定字段的值 HGET user id
HDEL key field 删除哈希表中指定字段 HDEL user id
HGETALL key 获取哈希表中所有字段和值 HGETALL user
集合操作
SADD key member 向集合中添加成员 SADD set "member1"
SMEMBERS key 获取集合中的所有成员 SMEMBERS set
SREM key member 从集合中移除成员 SREM set "member1"
有序集合操作
ZADD key score member 向有序集合中添加成员及其分数 ZADD leaderboard 100 "John"
ZRANGE key start stop 获取有序集合指定范围内的成员 ZRANGE leaderboard 0 -1

2. 项目中操作Redis

2.1 导入依赖


    org.springframework.boot
    spring-boot-starter-data-redis

2.2 配置连接

spring:
  redis:
    host: localhost
    port: 6379
    jedis:
      pool:
        max-idle: 10 # 最大空闲连接数
        min-idle: 0 # 最小空闲连接数
        max-wait: -1ms # 最大等待连接事件   -1代表一直等
        max-active: 100 # 最大连接数

2.3 配置类

2.4 通过注解自动操作

2.4.1 @Cacheable

        标记在一个方法上,也可以标记在一个类上。主要是缓存标注对象的返回结果,标注在方法上缓存该方法的返回值,标注在类上,缓存该类所有的方法返回值。

@Cacheable(value = "productsCache", key = "#productId")
public Product getProductById(Long productId) {
    // 从数据库或其他数据源中获取产品信息
    return product;
}

        value:指定缓存的名称或缓存管理器的名称
        key:指定用于唯一标识缓存条目的键。可以使用 SpEL 表达式来动态生成键。
        condition:指定一个SpEL 表达式,当条件满足时才进行缓存。默认始终缓存结果。

2.4.2 @CacheEvict

        从缓存中移除相应数据

2.4.3 @Caching

        使用 @Caching 注解,可以将多个缓存操作注解组合在一起,一次性应用到方法上

@Caching(evict = {
    @CacheEvict(value = "findAll",allEntries = true),
    @CacheEvict(value = "findById",key = "#id")  //findById::1001
})

2.5 利用RedisTemplate手动操作

你可能感兴趣的:(JavaEE,缓存,数据库,redis)