spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html

码云源码地址:https://gitee.com/jinxiaohang/springboot

一、介绍

  Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

  Redis 优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

二、本地安装Redis

  Redis对于Linux是官方支持的,安装和使用没有什么好说的,普通使用按照官方指导,5分钟以内就能搞定。

  详情请参考:http://redis.io/download

  Redis官方是不支持windows的,但在 GitHub上开发了一个Win64的版本。

  项目地址是:https://github.com/MicrosoftArchive/redis/releases

  1、下载解压,在解压后的bin目录下有以下这些文件:

    redis-benchmark.exe #基准测试 
    redis-check-aof.exe # aof 
    redis-check-dump.exe # dump 
    redis-cli.exe # 客户端 
    redis-server.exe # 服务器 
    redis.windows.conf # 配置文件

    。。。

  2、打开 redis-server.exe # 服务器 即可开启服务。【需要用Administrator用户运行,如果不是管理员账户就会出各种问题,服务安装以后启动不了等等问题,应该可以修改服务的属性–>登录用户等选项来修正.】

  3、双击打开 redis-cli.exe , 如果不报错,则连接上了本地服务器

  4、推荐一款可视化工具:RedisStudio

  Redis安装没有问题时就可以进入下面的步骤。

三、添加依赖

如果是新建项目的,可以在这页添加依赖:

原有项目只需添加一下架包:

<!--添加缓存支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--添加Redis缓存支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

四、添加配置

在application.yml增加Redis的配置

spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver jpa:
hibernate:
ddl-auto: update
show-sql: true redis:
# 使用的数据库(0-15),默认为0
database: 0
# Redis服务器连接密码(默认为空
password:
# Redis服务器连接端口
port: 6379
# Redis服务器地址
host: 127.0.0.1

五、Java 使用 Redis

添加RedisUtil类。(只是将Redis当作普通数据库实现基本操作)

public class RedisUtil {

    /**
* 连接到 redis 服务
*/
public static void connectRedis() {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//查看服务是否运行
System.out.println("服务正在运行: "+jedis.ping());
} /**
*Redis Java String(字符串) 实例
*/
public static void useString(){
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("xiaohang", "123456");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("xiaohang"));
} /**
* Redis Java List(列表) 实例
*/
public static void useList(){
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//存储数据到列表中
jedis.lpush("site-list", "Baidu");
jedis.lpush("site-list", "Google");
jedis.lpush("site-list", "Taobao");
// 获取存储的数据并输出
List<String> list = jedis.lrange("site-list", 0 ,2);
for(int i=0; i<list.size(); i++) {
System.out.println("列表项为: "+list.get(i));
}
} /**
* Redis Java Keys 实例
*/
public static void useKeys(){
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功"); // 获取数据并输出
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key);
}
}
}

六、运用Redis的缓存

1、让SpringBoot内置的缓存框架使用我们的Redis作为新的缓存,我们来添加一个RedisConfig的配置类。

添加RedisConfig类实现Redis配置。

@Configuration
@EnableCaching
public class RedisConfig { @Bean
public CacheManager cacheManager(RedisTemplate redisTemplate){
return new RedisCacheManager(redisTemplate);
}
}

@EnableCaching注解来开启我们的项目支持缓存,我们在配置类内添加了方法cacheManager(),方法的返回值则是使用了我们的Redis缓存的管理器,SpringBoot项目启动时就会去找自定义配置的CacheManager对象并且自动应用到项目中。

2、编写各层代码,方式与以往一样,引用代码:https://gitee.com/jinxiaohang/springboot/tree/master/springboot-jpa

3、修改serviceimpl层,实现缓存(注解方式)

@Service
@CacheConfig(cacheNames = "user")//新添加
public class UserServiceImpl implements UserService {
@Autowired
private UserInfoRepository userInfoRepository; @Cacheable//新添加
@Override
public List<UserInfo> list() {
return userInfoRepository.findAll();
} @Override
public UserInfo getOne(String userId) {
return userInfoRepository.findOne(userId);
} @Override
public UserInfo save(UserInfo user) {
return userInfoRepository.save(user);
} @Override
public UserInfo update(UserInfo user) {
return userInfoRepository.save(user);
} @Override
public boolean delete(String userId) {
userInfoRepository.delete(userId);
return true;
}
}

4、异常处理(如果没有可跳过)

如果按照上面的代码运行会出现NotSerializableException异常,需要让实体类继承实现Serializable接口。

@Data
@Entity
public class UserInfo implements Serializable{
@Id
private String userId;
private String userName;
private String password; @Override
public String toString() {
return "{ \"userId\" : \""+userId
+"\", \"userName\" : \""+userName
+"\", \"password\" : \""+password
+"\" }";
}
}

5、运行测试

先将serviceimpl层的@Cacheable注解注释了,运行程序,连续访问接口3次,控制台内容如下:

再将注释删除了,运行程序,连续访问接口3次,控制台内容如下:

第一次访问的结果缓存下来了,并持久化到Redis数据库中,下次访问就先访问缓存,如果存在就不会访问mysql数据库。如果mysql数据库中的信息被修改了,缓存中的数据记得更新。

本次主要实现整合Redis,对于Redis的使用没有更深入的研究,今天展示的使用可能不够规范。

七、Redis命令

Redis数据库内有很多个命令下面我简单介绍几个大家在日常开发中常用到的。

flushdb:清空当前数据库。
select [index]:选择索引数据库,index为索引值名,如:select 1。
del [key]:删除一条指定key的值。
keys *:查看数据库内所有的key。
flushall:清空所有数据库。
quit:退出客户端连接。

第12章—整合Redis的更多相关文章

  1. SpringBoot进阶教程(二十七)整合Redis之分布式锁

    在之前的一篇文章(<Java分布式锁,搞懂分布式锁实现看这篇文章就对了>),已经介绍过几种java分布式锁,今天来个Redis分布式锁的demo.redis 现在已经成为系统缓存的必备组件 ...

  2. Spring+SpringMVC+Mybatis整合redis

    SSM整合redis redis是一种非关系型数据库,与mongoDB不同的是redis是内存数据库,所以访问速度很快.常用作缓存和发布-订阅式的消息队列. 这里用的是ssm框架+maven构建的项目 ...

  3. SpringCache整合Redis

    之前一篇文章 SpringBoot整合Redis 已经介绍了在SpringBoot中使用redisTemplate手动 操作redis数据库的方法了.其实这个时候我们就已经可以拿redis来做项目了, ...

  4. Linux就这个范儿 第12章 一个网络一个世界

    Linux就这个范儿 第12章 一个网络一个世界 与Linux有缘相识还得从一项开发任务说起.十八年前,我在Nucleus  OS上开发无线网桥AP,需要加入STP生成树协议(SpanningTree ...

  5. SpringBoot进阶教程(二十六)整合Redis之共享Session

    集群现在越来越常见,当我们项目搭建了集群,就会产生session共享问题.因为session是保存在服务器上面的.那么解决这一问题,大致有三个方案,1.通过nginx的负载均衡其中一种ip绑定来实现( ...

  6. SpringBoot进阶教程(二十五)整合Redis之@Cacheable、@CachePut、@CacheEvict的应用

    在上一篇文章(<SpringBoot(二十四)整合Redis>)中,已经实现了Spring Boot对Redis的整合,既然已经讲到Cache了,今天就介绍介绍缓存注解.各家互联网产品现在 ...

  7. SpringBoot进阶教程(二十四)整合Redis

    缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力.Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非 ...

  8. Spring Boot 2.x整合Redis

    最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助. Redis是什么 Redis 是开源免费高性能的key-value数据库.有以下的优势(源于Redis ...

  9. SpringBoot整合Redis及Redis工具类撰写

            SpringBoot整合Redis的博客很多,但是很多都不是我想要的结果.因为我只需要整合完成后,可以操作Redis就可以了,并不需要配合缓存相关的注解使用(如@Cacheable). ...

随机推荐

  1. GNU Linux高并发性能优化方案

    /*********************************************************** * Author : Samson * Date : 07/14/2015 * ...

  2. Atitit.数据操作dsl 的设计 ---linq 方案

    Atitit.数据操作dsl 的设计 ---linq 方案 1.1. sql与api方式1 1.2. Linq方案与stream方案的选择,1 1.3. 前缀表达式 vs 中缀表达式1 1.4. 要不 ...

  3. MySQL触发器更新本表数据异常:Can't update table 'tbl' in stored function/trigger because it

    MySQL触发器更新本表数据异常:Can't update table 'tbl' in stored function/trigger because it 博客分类: 数据库 MySQLJava ...

  4. MySQL分组查询获取每个学生前n条分数记录(分组查询前n条记录)

    CREATE TABLE `t_test` ( `id` ) NOT NULL AUTO_INCREMENT, `stuid` ) NOT NULL, `score` ) DEFAULT NULL, ...

  5. poj 1821 Fence(单调队列)

    题目链接:http://poj.org/problem?id=1821 题目分析来自:http://blog.csdn.net/tmeteorj/article/details/8684453 连续的 ...

  6. shader 笔记(一)

  7. [python小记]使用lxml修改xml文件,并遍历目录

    这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中.在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml.而弃用自带的ElementTree的原因就是,na ...

  8. Compiler Error C2872: ambiguous symbol

    参考资料:http://blog.csdn.net/greytree/article/details/354530 刚才写的程序报错ERROR C2872(CL.exe)原因很简单 ZThread有定 ...

  9. phoneGap 3.5 eclipise 模拟器调试

    最近想搞phoneGap开发,可是一看 http://www.phonegapcn.com/ phoneGap中文网 FUCK .phoneGap 还在1.0.0 里混呢.现在phoneGap 3.5 ...

  10. Storm学习笔记——简介

    1. 简介 流式计算的历史 早在7.8年前诸如UC伯克利.斯坦福等大学就开始了对流式数据处理的研究,但是由于更多的关注于金融行业的业务场景或者互联网流量监控的业务场景,以及当时互联网数据场景的限制,造 ...