最近在使用 Spring Boot, 发现其功能真是强大, 可以快速的集成很多的组件功能, 非常方便:
今天就来介绍下, 如何集成 Redis.
定义
Redis 是一个高性能的 key-value 数据库. 它支持存储的 value 类型很多, 包括 string(字符串),list(链表),set(集合),zset(sorted set - 有序集合)和 hash(哈希类型).
以下是 Redis 的一些优点.
异常快 - Redis 非常快, 每秒可执行大约 110000 次的设置 (SET) 操作, 每秒大约可执行 81000 次的读取 / 获取 (GET) 操作.
支持丰富的数据类型 - Redis 支持开发人员常用的大多数数据类型, 例如列表, 集合, 排序集和散列等等. 这使得 Redis 很容易被用来解决各种问题, 因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决.
操作具有原子性 - 所有 Redis 操作都是原子操作, 这确保如果两个客户端并发访问, Redis 服务器能接收更新的值.
多实用工具 - Redis 是一个多实用工具, 可用于多种用例, 如: 缓存, 消息队列(Redis 本地支持发布 / 订阅), 应用程序中的任何短期数据, 例如, web 应用程序中的会话, 网页命中计数等.
如何搭建?
一. 加入 Redis 相关依赖
二, application.properties 中加入 Redis 相关配置
在 @Configuration 或者集成了这个注解的注解标识的类中声明一个 Redis 的 bean, 本例是在入口类上声明的 Bean:
在 Controller 里注入 StringRedisTemplate:
启动浏览器访问:
以上是手动进行 Redis 的操作, 那如何进行自动的的缓存操作呢?
在启动类中添加注解
@EnableCaching 会为每个 bean 中被 @Cacheable, @CachePut and @CacheEvict 修饰的 public 方法进行缓存操作.
缓存的用法
这个方法在 userId 相同形同的情况下, 第一次调用的时候会执行方法, 以后每次在调用的时候会读取缓存中的数据.
缓存的注解介绍:
@Cacheable
这个注解, 会每次先检查是否执行过这个方法, 在从缓存数据库中查看 key 是否相等, 如果找到了, 从缓存中读取, 没有匹配的那么执行该方法, 将结果缓存.
缓存都是通过 key-value 进行储存的, value 或 cacheNames 必须指定 (value 是 cacheNames 的别名), 指定多个 value 用(value = {"value1", "value2"}) 如果没有指定 key,spring 会提供一个默认的 KeyGenerator, 这个 KeyGenerator 根据参数生成 key, 如果方法没有参数返回 KeyGenerator.EMPTY, 如果有一个参数返回这个实例, 如果有多个参数返回包含这些参数的 SimpleKey. 可以通过继承 CachingConfigurerSupport 自己指定 KeyGenerator, 类上加 @Configuration 注解. 也可以像上面那样自己指定 key, 需要了解 SPEL 表达式.
多线程的情况下, 可能同时会有多个线程同时进入一个没被缓存过的方法, 这样会导致多个线程都会执行一遍方法, sync="true" 会将第一次计算返回值的这个方法 lock, 计算完成后将结果缓存
备注: Redis 最为常用的数据类型主要有以下:
- String
- Hash
- List
- Set
- Sorted set
- pub/sub
- Transactions
最近一直在使用 Spring Boot, 想一起学习的关注我吧!
来源: http://developer.51cto.com/art/201811/586173.htm