1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
2 Redis支持数据的备份,即master-slave模式的数据备份。
3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Spring框架基本上不用过多介绍,我相信点开本文的朋友基本上都很熟悉或者用过Spring框架了,在 java web开发方向,spring家族的地位应该一直处于最高的,本文要分享的是,通过Spring集成操作Redis数据库,大家会说这样的内容网上一大堆了,别着急,我们今天先分享两种方式,回头我们再进行对比一下。
第一种方式:Jedis
集成步骤:
1. 添加jar包或者引入依赖
2. 添加redis配置文件(非必须,可以在spring配置文件中直接配置)
#访问地址
redis.host=127.0.0.1
#访问端口
redis.port=6379
#注意,如果没有password,此处不设置值,但这一项要保留
redis.password=
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
redis.maxIdle=300
#连接池的最大数据库连接数。设为0表示无限制
redis.maxActive=600
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWait=1000
#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true
3. 在applicationContext.xml添加redis的bean
<!-- scanner redis properties -->
4. 测试
@Autowired
private ShardedJedisPool shardedJedisPool;//注入ShardedJedisPool
@RequestMapping(value = “/demo_set”,method = RequestMethod.GET)
@ResponseBody
public String demo_set(){
//获取ShardedJedis对象
ShardedJedis shardJedis = shardedJedisPool.getResource();
//存入键值对
shardJedis.set(“key1”,“hello jedis”);
//回收ShardedJedis实例
shardJedis.close();
return “set”;
}
@RequestMapping(value = “/demo_get”,method = RequestMethod.GET)
@ResponseBody
public String demo_get(){
ShardedJedis shardedJedis = shardedJedisPool.getResource();
//根据键值获得数据
String result = shardedJedis.get(“key1”);
shardedJedis.close();
return result;
}
第二种方式:
- 配置方式同Jedis,只是使用RedisTemplate进行数据操作
- 示例代码
//配置类 @Configuration @PropertySource("classpath:redis.properties") public class RedisConfig extends JCacheConfigurerSupport { @Autowired private Environment environment; @Bean public RedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory fac = new JedisConnectionFactory(); fac.setHostName(environment.getProperty("redis.hostName")); fac.setPort(Integer.parseInt(environment.getProperty("redis.port"))); fac.setPassword(environment.getProperty("redis.password")); fac.setTimeout(Integer.parseInt(environment.getProperty("redis.timeout"))); fac.getPoolConfig().setMaxIdle(Integer.parseInt(environment.getProperty("redis.maxIdle"))); fac.getPoolConfig().setMaxTotal(Integer.parseInt(environment.getProperty("redis.maxTotal"))); fac.getPoolConfig().setMaxWaitMillis(Integer.parseInt(environment.getProperty("redis.maxWaitMillis"))); fac.getPoolConfig().setMinEvictableIdleTimeMillis( Integer.parseInt(environment.getProperty("redis.minEvictableIdleTimeMillis"))); fac.getPoolConfig() .setNumTestsPerEvictionRun(Integer.parseInt(environment.getProperty("redis.numTestsPerEvictionRun"))); fac.getPoolConfig().setTimeBetweenEvictionRunsMillis( Integer.parseInt(environment.getProperty("redis.timeBetweenEvictionRunsMillis"))); fac.getPoolConfig().setTestOnBorrow(Boolean.parseBoolean(environment.getProperty("redis.testOnBorrow"))); fac.getPoolConfig().setTestWhileIdle(Boolean.parseBoolean(environment.getProperty("redis.testWhileIdle"))); return fac; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, String> redis = new RedisTemplate<>(); redis.setConnectionFactory(redisConnectionFactory); redis.afterPropertiesSet(); return redis; } } //测试 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {RedisConfig.class}) public class RedisTest { @Autowired private RedisTemplate<String, String> redisTemplate; @Test public void testRedisObj() { Map<String, Object> properties = new HashMap<>(); properties.put("123", "hello"); properties.put("abc", 456); redisTemplate.opsForHash().putAll("hash", properties); Map<Object, Object> ans = redisTemplate.opsForHash().entries("hash"); System.out.println("ans: " + ans); } }
//执行结果
ans: {123=hello, abc=456}