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. python学习之split()

    定义: Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 语法: str.split(str="", num=st ...

  2. CCNA2.0笔记_子网划分

    http://files.cnblogs.com/files/airoot/%E5%AD%90%E7%BD%91%E5%88%92%E5%88%86.zip 网络 默认子网掩码 A类 255.0.0. ...

  3. linux学习笔记12--命令less

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...

  4. 恶习为什么难戒?因为你在HALT状态

          幸福课 | 恶习为什么难戒?因为你在HALT状态 文 游识猷 饥饿(hungry).生气(angry).孤单(lonely).疲惫(tired)这4种状态,被称为HALT——这个词刚好是英 ...

  5. spoj7001 Visible Lattice Points 莫比乌斯反演+三维空间互质对数

    /** 题目:Visible Lattice Points 链接:https://vjudge.net/contest/178455#problem/A 题意:一个n*n*n大小的三维空间.一侧为(0 ...

  6. 磁盘 & 文件系统

    1. dumpe2fs –h /dev/sda1 查询整个磁盘情况( 其中后边的设备名可以换 ) 2. df –h , du –h 查询磁盘容量情况 3. 实体链接和符号链接 实体链接: ln mk. ...

  7. 第一百三十八节,JavaScript,封装库--插件

    JavaScript,封装库--插件 库主要是用来封装一般JavaScript的常规操作代码,而拖拽这种特效代码属于功能性代码,并不是必须的,所以这种类型的代码,我们建议另外封装,在需要的时候作为插件 ...

  8. Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

    Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 解答:会执行,在return前 ...

  9. 左萧龙(LZ)个人博客

    网址(blog):http://www.cnblogs.com/zuoxiaolong/ 网站:http://www.zuoxiaolong.com/

  10. 第5步:建立主机间的信任关系(sgdb1、sgdb2)

    5.1 Oracle用户下建立信任 5.11创建.ssh目录 [root@sgdb1 /]# su - oracle [oracle@sgdb1 ~]$ mkdir .ssh       创建一个.s ...