1 Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
2 Redis支持數據的備份,即master-slave模式的數據備份。
3 Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
Spring框架基本上不用過多介紹,我相信點開本文的朋友基本上都很熟悉或者用過Spring框架了,在 java web開發方向,spring家族的地位應該一直處於最高的,本文要分享的是,通過Spring集成操作Redis數據庫,大家會說這樣的內容網上一大堆了,別着急,我們今天先分享兩種方式,回頭我們再進行對比一下。
第一種方式:Jedis
集成步驟:
1. 添加jar包或者引入依賴
#訪問地址
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 -->
@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}