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. 静态资源打包:一个javescript 的src引用多个文件,一个link引用多个CSS文件

    疑惑描述: 查看了淘宝网的首页源文件,看到这样的一个特殊的 <script src="http://a.tbcdn.cn/??s/kissy/1.1.6/kissy-min.js,p/ ...

  2. 获取表单select域的选择部分的文本

    body> <form action="index.php"> <select name="" id="select" ...

  3. 在linux下编译运行C++程序

    头一回...把windows下的程序挪到linux下,代码见这篇随笔 1.编译ZTHREAD,使用./configure失败,直接编译的,方法还是上面提到的那篇随笔 2.编译源码,最开始用的cc,后来 ...

  4. I帧、B帧、P帧、NALU类型

    i帧 i frame,即内部画面 intra picture,通常是GOP的第一个帧(即IDR)I帧是最大去除图像空间冗余信息而压缩得到的帧,自带全部信息,不参考其他帧可独立解码,称为帧内编码帧所有视 ...

  5. yii2 RESTful API Develop

    参考文档:http://www.yiiframework.com/doc-2.0/guide-rest.html 以 DB 中的 news 表为例创建该资源的 RESTful API,最终的测试通过工 ...

  6. Python中集合类型(set)学习小结

    set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引.分片等类序列的操作. 初始化 复制代码代码如下: s0 = set()d0 = {}s ...

  7. 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数

    在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...

  8. 那些让人睡不着觉的bug,你有没有遭遇过?

    我先讲一个小故事,以前在外企工作时的一个亲身经历. 当时我所在的team,负责手机上多媒体Library方面的开发.有一天,一个具有最高等级的bug被转到了我的手上.这个bug非常诡异,光是重现它就需 ...

  9. thinkphp 从服务器拉取下来 验证码失效

    public function verify(){ ob_end_clean();//加入 $verify = new \Think\Verify(); $verify->entry(1); }

  10. K-NN算法 学习总结

    1. K-NN算法简介 K-NN算法 ( K Nearest Neighbor, K近邻算法 ), 是机器学习中的一个经典算法, 比较简单且容易理解. K-NN算法通过计算新数据与训练数据特征值之间的 ...