Java学习(⼆)Java中存储数据的三种⽅法
Java学习(⼆)Java中存储数据的三种⽅法
⼀:Session存储
此⽅法多⽤于浏览器,当多⽅处理时不安全。具有⼀定的即时性。
1.HttpSession session = Session();
2. session.setAttribute("code", result);//存⼊数据
3. String codetest =(String) Attribute("code");//取出数据
⼆:Map存储数据
⽐较基础的⽅法
1. Map<String, String> maps =new HashMap<String, String>();//设置成全局变量
2.maps.put("emailaddress", result);//map存储数据
学习java的学习方法3.String oldcode =(String) ("emailaddress");//取出数据
三:Redis存储数据
前期配置
下载redis压缩包
下载结束以后打开
第⼀,打开,如下图所⽰
第⼆,如在命令⾏中执⾏存储数据的⼀些命令,那么可在安装包所在⽬录打开cmd,输⼊相应的命令⾏,具体redis的命令及学习在
⼀个⾼性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis⽀持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进⾏使⽤。
Redis不仅仅⽀持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis⽀持数据的备份,即master-slave模式的数据备份。
Maven引⼊配置依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--1.5的版本默认采⽤的连接池技术是jedis,2.0以上版本默认连接池是lettuce,因为此次是采⽤jedis,所以需要排除lettuce的jar -->
<exclusions>
<exclusion>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</exclusion>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- jedis客户端-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2,使⽤jedis必须依赖它-->
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.5.0</version>
</dependency>
Application.properties
Redis数据库索引(默认为0)
#Redis服务器地址
Redis服务器连接端⼝
连接池最⼤连接数(使⽤负值表⽰没有限制) 2.0区别 1.0+使⽤的是 dis.pool.max-acitive
连接池最⼤阻塞等待时间(使⽤负值表⽰没有限制)2.0区别
#连接池中的最⼤空闲连接 2.0区别
连接池中的最⼩空闲连接 2.0区别
配置redisConfig
这⾥的区别在于springboot2.x的RedisCacheManager的构造⽅法产⽣了变化,所以在此做了修改.
CacheManage的配置是为了配合注解使⽤redis⽽配置的,然⽽在我的开发使⽤中不太习惯使⽤注解,
⾸先注解确实可以更⽅便,但是复杂的操作和异常⽆法处理,这就使的灵活性有所下降,本⼈还是更喜欢使⽤RedisTemplate,当然⼀些简单的处理就完全可以配合使⽤注解了.在下⾯的测试中,我将使⽤RedisTemplate进⾏操作
fig;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import t.annotation.Bean;
import t.annotation.Configuration;
import t.annotation.Configuration;
import org.dis.cache.RedisCacheConfiguration;
import org.dis.cache.RedisCacheManager;
import org.dis.cache.RedisCacheWriter;
import org.tion.RedisConnectionFactory;
import org.RedisTemplate;
import org.StringRedisTemplate;
import org.dis.serializer.Jackson2JsonRedisSerializer;
import org.dis.serializer.StringRedisSerializer;
import java.time.Duration;
/**
* redis配置类
*
* @author zcc ON 2018/3/19
**/
@Configuration
@EnableCaching//开启注解
public class RedisConfig {
@Bean
//如使⽤注解的话需要配置cacheManager
CacheManager cacheManager(RedisConnectionFactory connectionFactory){
//初始化⼀个RedisCacheWriter
RedisCacheWriter redisCacheWriter = LockingRedisCacheWriter(connectionFactory); RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
//设置默认超过期时间是1天
//初始化RedisCacheManager
RedisCacheManager cacheManager =new RedisCacheManager(redisCacheWriter, defaultCacheCo
nfig);
return cacheManager;
}
// 以下两种redisTemplate⾃由根据场景选择
@Bean
public RedisTemplate<Object, Object>redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<Object, Object> template =new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
//使⽤Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使⽤JDK的序列化⽅式)
Jackson2JsonRedisSerializer serializer =new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper =new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
//使⽤StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory){
StringRedisTemplate stringRedisTemplate =new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(factory);
return stringRedisTemplate;
}
}
测试
pte;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.st.context.SpringBootTest;
import org.RedisTemplate;
import st.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class NeopteApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
public void contextLoads(){
//这⾥相当于redis对String类型的set操作
redisTemplate.opsForValue().set("test","helloworld");
/
/这⾥相当于redis对String类型的get操作
String test =(String)redisTemplate.opsForValue().get("test");
System.out.println(test);
}
}
//设置值且设置超时时间
/stringRedisTemplate.opsForValue().set("Middle","Yu",3, TimeUnit.MINUTES);//该处为三分钟
//TimeUnit.DAYS ⽇的⼯具类
//TimeUnit.HOURS 时的⼯具类
//TimeUnit.MINUTES 分的⼯具类
// TimeUnit.SECONDS 秒的⼯具类
/
/TimeUnit.MILLISECONDS 毫秒的⼯具类
这⾥只是对redis进⾏了简单的String类型的set和get操作,如果需要后续可以写⼀篇使⽤redisTemplate操作redis各种数据类型的⽅法上⾯是⼀个需要配置⽂件的⽅法,下⾯说⼀个不需要配置⽂件,稍微简洁⼀点的⽅法
1.⾸先只⽤引进⼀个redis的maven依赖
<!-- redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
2.所有代码在测试类中
package org.ller;
import org.StringRedisTemplate; import org.ValueOperations; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/MyTest")
public class RedisController {
private StringRedisTemplate template;
ValueOperations<String,String> redisOperations; RedisController(StringRedisTemplate template){
redisOperations=template.opsForValue();
}
@RequestMapping("/set")
public String set(){
redisOperations.set("namexyx","xyx");
return"success";
}
@RequestMapping("/get")
public String get(){
("namexyx");
}
@RequestMapping("/hasKey")
public String hasKey(){
return template.hasKey("namexyx").toString();
}
}
⽂中部分代码借鉴其他博主,在此感谢,如有侵权,请联系
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论