热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从.Net到Java学习第四篇——springboot+redis,ASP.NETRedis开发

从.Net到Java学习系列目录“学习java已经十天,有时也怀念当初.net的经典,让这语言将你我相连,怀念你……”接上一篇,本篇使用到的框架redis、FastJSON。环境准

从.Net到Java学习系列目录

“学习java已经十天,有时也怀念当初.net的经典,让这语言将你我相连,怀念你……”接上一篇,本篇使用到的框架redis、FastJSON。

环境准备

安装redis,下图是我本机的redis绿色版,你可以网上自行下载安装,如果不知道如何怎么操作,可以移步到我的另一篇文章:ASP.NET Redis 开发

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》

以管理员身份打开CMD窗口:

C:\Users\zouqj>e:
E:\
>cd E:\Redis-x64-3.2.100
E:\Redis
-x64-3.2.100>redis-server --service-install redis.windows.conf --loglevel verbose --service-name redis --port 6379

运行之后,记得启动redis服务,我这里redis没有设置密码。

启动服务命令:net start redis

关于FastJSON框架的使用呢可以参考文章:高性能JSON框架之FastJson的简单使用

修改pom.xml,添加redis的依赖


<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-redisartifactId>
<version>1.3.8.RELEASEversion>
dependency>

<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.1.23version>
dependency>

修改项目配置文件,添加如下配置节点

redis:
database: 0
host: 127.0.0.1
port: 6379
pool:
max-active: 100
max-idle: 10
max-wait: 100000
timeout: 0

最终配置如下:

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》

redis配置项说明:

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database
=0
# Redis服务器地址
spring.redis.host
=127.0.0.1
# Redis服务器连接端口
spring.redis.port
=6379
# Redis服务器连接密码(默认为空)
spring.redis.password
=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max
-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max
-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max
-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min
-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout
=0

新建一个redis的配置类RedisConfig,因为是配置类,所以要在类上面添加注解@Configuration

@EnableAutoConfiguration注解我们看下它的源码,发现它是一个组合注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.
class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY
= "spring.boot.enableautoconfiguration";
Class
[] exclude() default {};
String[] excludeName()
default {};
}

@EnableAutoConfiguration注解大致处理流程就是:
1、先去扫描已经被@Component所注释的类,当然会先判断有没有@Condition相关的注解。
2、然后递归的取扫描该类中的@ImportResource,@PropertySource,@ComponentScan,@Bean,@Import。一直处理完。

参考:@EnableAutoConfiguration 配置解释

@Configuration
@EnableAutoConfiguration
public class RedisConfig {
@Bean
@ConfigurationProperties(prefix
= "spring.redis.pool")
public JedisPoolConfig getRedisConfig() {
JedisPoolConfig config
= new JedisPoolConfig();
return config;
}
@Bean
@ConfigurationProperties(prefix
= "spring.redis")
public JedisConnectionFactory getConnectionFactory() {
JedisConnectionFactory factory
= new JedisConnectionFactory();
factory.setUsePool(
true);
JedisPoolConfig config
= getRedisConfig();
factory.setPoolConfig(config);
return factory;
}
@Bean
public RedisTemplate getRedisTemplate() {
JedisConnectionFactory factory
= getConnectionFactory();
RedisTemplate
template = new StringRedisTemplate(factory);
return template;
}
}

添加一个redis的接口服务RedisService

package com.yujie.service;
public interface RedisService {
/**
* set存数据 *
@param key * @param value * @return
*/
boolean set(String key, String value);
/**
* get获取数据 *
@param key * @return
*/
String get(String key);
/**
* 设置有效天数 *
@param key * @param expire * @return
*/
boolean expire(String key, long expire);
/**
* 移除数据 *
@param key * @return
*/
boolean remove(String key);
}

添加redis实现类RedisServiceImpl,注意下面代码中标红了的代码,这里设置redis的key和value以字符串的方式进行存储,如果不配置的话,默认是以16进制的形式进行存储,到时候我们读取的时候,就会看着很乱。

@Service("redisService")
public class RedisServiceImpl implements RedisService {
@Resource
private RedisTemplate redisTemplate;
@Override
public boolean set(final String key, final String value) {
boolean result = redisTemplate.execute(new RedisCallback() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer
serializer = redisTemplate.getStringSerializer();
connection.set(serializer.serialize(key), serializer.serialize(value));
return true;
}
});
return result;
}
@Override
public String get(final String key) {
String result
= redisTemplate.execute(new RedisCallback() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer
serializer = redisTemplate.getStringSerializer();
byte[] value = connection.get(serializer.serialize(key));
return serializer.deserialize(value);
}
});
return result;
}
@Override
public boolean expire(final String key, long expire) {
return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
@Override
public boolean remove(final String key) {
boolean result = redisTemplate.execute(new RedisCallback() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer
serializer = redisTemplate.getStringSerializer();
connection.del(key.getBytes());
return true;
}
});
return result;
}
}

由于项目中引入了spring-boot-starter-test的依赖,也就是集成了spring boot的单元测试框架。给redis实现类,添加单元测试,将光标移动到RedisService接口位置处,然后按Alt+Enter,如下图所示:

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》

全选所有方法

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》

在model包中,添加一个实体类Person

public class Person {
private String name;
private String sex;
public Person() {
}
public Person(String name, String sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}

接下来,我们再修改一下单元测试

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》
《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisServiceImplTest {
private JSONObject json = new JSONObject();
@Autowired
private RedisService redisService;
@Test
public void contextLoads() throws Exception {
}
/**
* 插入字符串
*/
@Test
public void setString() {
redisService.set(
"redis_string_test", "springboot redis test");
}
/**
* 获取字符串
*/
@Test
public void getString() {
String result
= redisService.get("redis_string_test");
System.out.println(result);
}
/**
* 插入对象
*/
@Test
public void setObject() {
Person person
= new Person("person", "male");
redisService.set(
"redis_obj_test", json.toJSONString(person));
}
/**
* 获取对象
*/
@Test
public void getObject() {
String result
= redisService.get("redis_obj_test");
Person person
= json.parseObject(result, Person.class);
System.out.println(json.toJSONString(person));
}
/**
* 插入对象List
*/
@Test
public void setList() {
Person person1
= new Person("person1", "male");
Person person2
= new Person("person2", "female");
Person person3
= new Person("person3", "male");
List
list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
redisService.set(
"redis_list_test", json.toJSONString(list));
}
/**
* 获取list
*/
@Test
public void getList() {
String result
= redisService.get("redis_list_test");
List
list = json.parseArray(result, String.class);
System.out.println(list);
}
@Test
public void remove() {
redisService.remove(
"redis_test");
}
}

View Code

 我们发现,在单元测试类上面自动添加了2个注解,@SpringBootTest@RunWith(SpringRunner.class)

@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。

@RunWith就是一个运行器

@RunWith(SpringRunner.class)就是指用SpringRunner来运行

运行单元测试:

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》

查看redis中的结果,这里用到一个可视化的redis管理工具:RedisDesktopManager

《从.Net到Java学习第四篇——spring boot+redis,ASP.NET Redis 开发》


推荐阅读
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • win10系统搭建Java开发环境的操作方法
    本文介绍了win10系统搭建Java开发环境的详细操作方法,包括下载Windows10系统和Java SE,安装Java开发环境,设置变量等步骤。操作简单,只需按照指导进行即可。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法
    本文介绍了修复安装win10失败并提示“磁盘布局不受UEFI固件支持”的方法。首先解释了UEFI的概念和作用,然后提供了两种解决方法。第一种方法是在bios界面中将Boot Mode设置为Legacy Support,Boot Priority设置为Legacy First,并关闭UEFI。第二种方法是使用U盘启动盘进入PE系统,运行磁盘分区工具DiskGenius,将硬盘的分区表设置为gpt格式,并留出288MB的内存。最后,通过运行界面输入命令cmd来完成设置。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
author-avatar
为什么要这2502928433
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有