1. 程式人生 > >Redis之NOSQL資料庫

Redis之NOSQL資料庫

redis資料庫功能
藉助redisTemplate來對redis進行操作
redisTemplate 提供了對5種資料結構的操作結構
redisTemlate.opsForValue() //字串
redisTemlate.opsForHash() //hash (JSON) 返回結果是個hash 操作是在hash結構下操作的
redisTemlate.opsForList() //list集合 返回結果是個list 操作是在list結構下操作的
redisTemlate.opsForSet() //操作Set 返回結果是個Set 操作是在Set結構下操作的
redisTemlate.opsForZSet() //有序集合 返回結果是個ZSet 操作是在ZSet結構下操作的

redisTemplate.opsForValue()提供的方法:
https://blog.csdn.net/qq_25135655/article/details/80357137
set(Key k,value) 新增一個字串型別的值
get(Object key) 獲取一個字串型別
append(Key k,String value) 在原有的值基礎上新增字串到末尾
get(Key k,long start,long end) 擷取key鍵對應值得字串,從開始下標位置開始到結束下標的位置(包含結束下標)的字串。
getAndSet(Key k,Value) 獲取原來key鍵對應的值並重新賦新值。 與CAS的邏輯不同

如何構建redisTemplate?
第一步:建立JedisConnectionFactory (可以直接通過 @PropertySouce(“redis.properties”) 的方式將properties格式檔案注入)

public JedisConnectionFactory convertJedisConnectionFactory() {

JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName("127.0.0.1");//IP地址
jedisConnectionFactory.setPort(6379);//埠號
jedisConnectionFactory.setPassword("");//密碼

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(20);
jedisPoolConfig.setMaxIdle(20);
jedisPoolConfig.setMinIdle(20);
jedisPoolConfig.setMaxWaitMillis(30000);
jedisPoolConfig.setTestOnBorrow(false);
jedisPoolConfig.setTestOnReturn(false);
// jedisPoolConfig.setTestWhileIdle();

jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}

第二步:建立redisTemplate模板(對序列化器和反序列化器進行配置)

@Bean(value = "template")
public RedisTemplate<String,Object>redisTemplate()
{
RedisTemplate<String,Object> template =new RedisTemplate<>();
template.setConnectionFactory(convertJedisConnectionFactory());

Jackson2JsonRedisSerializer jsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om=new ObjectMapper();
//指定序列化的域
om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
//指定序列化輸入的型別(排除final型別)
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jsonRedisSerializer.setObjectMapper(om);
//主體選擇序列化方式 JSON
template.setDefaultSerializer(jsonRedisSerializer);
//Map部分
//序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
//設定hash key和value的序列化模式
template.setHashKeySerializer( new StringRedisSerializer());
template.setHashValueSerializer(jsonRedisSerializer);

//表示設定結束
template.afterPropertiesSet();
return template;
}

第三步:獲取操作物件(以普通字串操作為例)

//一對一的資料型別
@Bean(name ="ObjectredisTemplate")
public ValueOperations<String,Object>valueOperations(RedisTemplate<String,Object> template)
{
return template.opsForValue();
}