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操作

        连接别人的redis

 redis-cli -h 主机地址 -p 6379

字符串操作
SET key value 设置键值对SET name "John"
GET key 获取指定键的值GET name
DEL key 删除指定键DEL name
INCR key 将键对应的值加1INCR 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 导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.2 配置连接

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

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手动操作

    @Resource
    private RedisTemplate redisTemplate;

    @Transactional
    @Override
    public Boolean add(Kill kill) {
        boolean res = killMapper.add(kill);
        if(res){
            //放redis
            redisTemplate.opsForHash().put("kills",kill.getId()+"",kill);
        }
        return res;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值