Redis
一、为什么要用缓存?
缓存定义
缓存是一个高速数据交换的存储器,使用它可以快速的访问和操作数据。
程序中的缓存
在我们程序中,如果没有使用缓存,程序的调用流程是直接访问数据库的;
如果多个程序调用一个数据库,那么调用流程就如下图:
所以不同程序调用一个数据库,会给数据库的压力增大,这个时候缓存的作用就体现出来了;
建立一个缓存系统,缓解数据库压力。
缓存的优点
缓存是
key-value
类型,存储结构简单,所以查询效率比较快缓存是存储在内存中的,而一般的数据库是将数据存储在磁盘。
内存操作>磁盘操作速度,因此缓存的操作和读取比较快
缓存可扩展性比较强,因此它的负载能力、更改、查询效率更快。
二、缓存分类
缓存大致分为两类:
- 本地缓存
- 分布式缓存
本地缓存也叫单机缓存,就是说可以应用在单机环境下的缓存。所谓的单机环境是指将服务部署在一台服务器上。
本地缓存只适用于当前系统。
分布式缓存是指可以应用在分布式系统中的缓存。所谓的分布式系统就是指一套服务部署到多台服务器,并且通过负载分发将用户的请求按照一定的规则分发到不同服务器。
三、常见缓存使用
本地缓存的常见使用:
Spring Cache
,MyBatis
的缓存分布式缓存的常见使用:
Redis
和Memcached
本地缓存:Spring Cache
在
SpringBoot
项目中,可以直接使用Spring
内置的Cache
【本地缓存】,只需要三个步骤:
- 开启缓存
- 操作缓存
- 调用缓存
【1】开启缓存
在springbooot
启动类上加上 @EnableCaching
注解。
package com.example.redis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching // 开启缓存
public class RedisApplication {
public static void main(String[] args) {
SpringApplication.run(RedisApplication.class, args);
}
}
【2】操作缓存
操作类【操作方法】
package com.example.redis.service;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
/**
* @author SunYuHang
* @date 2023-02-14 09:41
* @ClassName : UserService //类名
*/
@Service
public class UserService {
@Cacheable(cacheNames = "user",key="#id")
public String getUser(int id){
//伪代码
System.out.println("我进入了getUser方法");
return "ID:"+id;
}
}
【3】调用缓存
使用类
package com.example.redis.controller;
import com.example.redis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author SunYuHang
* @date 2023-02-14 09:43
* @ClassName : UserController //类名
*/
@RequestMapping("/user")
@RestController
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/get")
public String getUser(int id){
return userService.getUser(id);
}
}
使用Postman
进行测试
第一次进入getUser
方法
有了缓存之后,我们第二次访问该方法
控制台就不会进行信息的打印了。
分布式缓存
Redis
和 Memcached
有什么区别?
- 存储方式不同:
memcached
把数据全部存在内存中,断电后会挂掉,数据不能超过内存大小;Redis
有部分存在硬盘上,这样搞就能保证数据的持久性; - 数据支持类型:
memcache
对数据类型支持相对简单;Redis
有复杂的数据结构; - 存储值大小不同:
Redis
最大可以达到 512MB;memcache
只有 1MB。
**总结一下:**通常情况下,如果是单机Spring项目,会直接使用 Spring Cache
作为本地缓存;如果分布式环境一般使用 Redis
。
四、Redis 数据类型和使用
Redis 有 5 大基础数据类型:
- String——字符串类型
- Hash——字典类型
- List——列表类型
- Set——集合类型
- ZSet——有序集合类型
其中最常用的就是字符串和字典类型。
下面我们先来进行一下Redis 的安装。
Redis 的安装
此处的 Redis 安装是针对 Linux 版本的安装, 由于 Redis 官方没有提供 Windows 版本, 只提供了 Linux 版本. 但是我们可以通过Windows 去 远程连接 Redis.【这里我使用的是xshell】
1.使用 yum 安装 Redis
使用如下命令, 将 Redis 安装到 Linux 服务器:
yum -y install redis
2.启动 Redis
使用如下命令, 以后台运行的方式启动 Redis:
redis-server /etc/redis.conf &
/etc/redis.conf
表示使用 Redis 默认的配置文件
& 表示后台运行
做了这两个步骤之后, 就可以在本地远程操控 Redis 了, 不过需要修改配置文件
3.操作 Redis
使用如下命令启动 Redis 客户端 :
redis-cli
4.本地远程连接
将 Redis 配置文件下载到本地. 该配置文件为 Linux 下的 /etc/redis.conf
先 cd 到 Redis 配置文件的路径下.
使用 sz 命令, 将文件下载到本地.
将 redis.conf
中的 “bind 127.0.0.1” 注释掉.
将 redis.conf
中的 :“protected-mode yes” 改为 “protected-mode no”.
将修改后的 redis.conf 上传至 Linux 下的 /etc 目录.
rm -rf redis.conf
-> 删除旧的配置文件
将本地更新的配置文件拖拽到 xshell 中.
使用命令 “redis-cli shutdown” 先关闭 redis 服务, 再使用 “redis-server /etc/redis.conf &” 启动 redis 服务.
安装 Redis 可视化工具
下载链接 : AnotherRedisDesktopManager
安装好了之后, 先把 6379 端口放开 :
打开可视化工具, 新建一个连接.
- Host 填自己云服务器的外网IP.
- Port 填写 6379.
当连接建立成功之后, 我们在 redis 默认的数据库中可以看到刚才创建的键值对
当然也就可以在可视化界面操作 Redis 了.
Redis数据类型
【1】字符串类型
【2】字典类型
【3】列表类型
【4】集合类型
【5】有序集合类型
持续更新中~~~