Redis~初识缓存, 了解本地缓存(Spring Cache)和分布式缓存(Redis)

初识缓存

  • 一个实际程序中最影响效率的就是对数据库中数据的操作,为了提高效率就必须引进缓存技术.
  • 缓存是一个道速数据交换的存储器, 使用它可以快速访问和操作数据.
  • 对于程序来说,当没有缓存时, 每次访问数据都得去数据库中查找, 而有多个数据请求的时候, 如果都去数据库中查找, 那么对数据库的压力也是非常大的, 但当我们引进缓存后, 将访问过一次的数据记录在缓存中, 待后续的访问这些数据的时候, 直接访问缓存就可以提高很高的效率

缓存的优点

  1. 缓存一般都是以 key - value 的格式保存并且查询的, 所以查询性能一般会比数据库高很多.
  2. 缓存的数据是保存在内存中的, 计算机对内存的操作的性能是远远大于对磁盘的
  3. 缓存更容易做分布式部署, 而数据库一般比较难实现分布式, 因此缓存的负载和性能更容易扩展和增加

缓存的分类

本地缓存 如(Spring Cache)

  • 本地缓存也叫单机缓存, 也就是说可以应用在单机环境下的缓存, 简单来说就是部署到一个服务器上, 所以本地缓存的特征是只适用于当前系统

演示Spring Cache

  • 分为三步
  1. 开启缓存
package com.cache8;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication
@EnableCaching //开启缓存
public class Application {
    
    

	public static void main(String[] args) {
    
    
		SpringApplication.run(Application.class, args);
	}

}

  1. 编写缓存代码
package com.cache8.service;

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

@Component //表示将这个类托付于Spring管理
public class PersonService {
    
    

    //如果是第一次访问这个数据 就将这个数据添加到缓存中
    @Cacheable(cacheNames = "person", key = "#id")
    public String getPerson(int id) {
    
    
        System.out.println("添加缓存...");
        return "获得的person为:" + id;
    }

}

  1. 调用缓存代码
package com.cache8.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.cache8.service.PersonService;

/**
 * Created with IntelliJ IDEA.
 * Description: If you don't work hard, you will a loser.
 * User: Listen-Y.
 * Date: 2020-09-08
 * Time: 15:16
 */
@RequestMapping(value = "/per")
@RestController
public class PersonController {
    
    

    @Autowired
    PersonService service;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    public Object get(int id) {
    
    
        return service.getPerson(id);
    }

}

在这里插入图片描述

分布式缓存(Redis)

  • 分布式缓存是指应用在分布式系统中的缓存, 所谓分布式系统是指将一套服务器部署道多台服务器上, 并且通过分载分发将用户的请求按照一定规则分发到不同的服务器上, 但是在众多的服务器上, 他们使用的缓存是同一个缓存, 也就是其中任何一台修改了缓存中的数据, 其他服务器也是可以感应知道的 如图所示
    在这里插入图片描述

Redis

  • Redis是当前最流行的数据库, 可以很大程度上提高互联网系统的性能
  • 其具备一定的持久层功能, 可以当做一种缓存工具, 还可以当做简单的数据库而言

Redis能取代传统数据库吗?

  • 我认为是不能
    虽然Redis更具性能优势,但是其性能还是主要依赖于俩点, 一是在内存中存储数据 二是减少了传统数据库的结构化和多范式规则, 这也就意味着其数据有易失性, 而且存储代价较高, 最主要的是没有那些结构和范式约束 其安全性就降低了.
    所以Redis依据其高性能和高响应, 做缓存工具最合适不过了

Redis的4大特点

  1. 响应快速: Redis 响应非常快,每秒可以执行大约 110 000 个写入操作,或者 81 000 个读操作,其速度远超数据库。如果存入一些常用的数据,就能有效提高系统的性能。
  2. 支持 6 种数据类型: 字符串、字典、列表、集合、可排序集合和基数。比如对于字符串可以存入一些 Java 基础数据类型,字典可以存储对象,列表可以存储 List 对象等。这使得在应用中很容易根据自己的需要选择存储的数据类型,方便开发。
  3. 操作都是原子的: 所有 Redis 的操作都是原子的,从而确保当两个客户同时访问 Redis 服务器时,得到的是更新后的值(最新值)。在需要高并发的场合可以考虑使用 Redis 的事务,处理一些需要锁的业务。
  4. MultiUtility 工具: Redis 可以在如缓存、消息传递队列中使用(Redis 支持“发布+订阅”的消息模式),在应用程序如 Web 应用程序会话、网站页面点击数等任何短暂的数据中使用。

Redis 对比 memcached

  1. 存储方式不同, Redis是可以将数据存储在内存加磁盘上, 而memcached只是将数据存储在内存中, 这也就导致了使用Redis更稳定一些
  2. 数据类型不同, redis支持很多种数据类型, memcached很少很简单
  3. 数据大小不同, Redis最大支持521mb 而memcached只支持1mb

猜你喜欢

转载自blog.csdn.net/Shangxingya/article/details/108468232
今日推荐