springboot 下 StringRedisTemplate 的使用

java 对Redis调用有好多种方式,可以用java的客户端Jedis进行相应的交互操作。

Spring和Redis的集成,封装了一个比较强大的RedisTemplate;

1. 依赖

依然是采用Jedis进行连接池管理,因此除了引入 spring-data-redis之外,再加上jedis依赖,pom文件中添加    <!-- 引入 redis 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
application.properties里面配置


spring.redis.database=1

spring.redis.host=127.0.0.1

spring.redis.port=6379

spring.redis.password=

spring.redis.pool.max-active=1000

spring.redis.pool.max-wait=-1

spring.redis.pool.max-idle=10

spring.redis.pool.min-idle=2

spring.redis.timeout=0

使用

import java.io.IOException;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.pojo.SysUser;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;

@RestController
@RequestMapping("redis")
public class RedisContronller {
	@Autowired
	private StringRedisTemplate strRedis;
	
	@RequestMapping("test")
	public String test() throws IOException {
		strRedis.opsForValue().set("name", "lnndjj");
		//
		SysUser user =new SysUser();
		user.setId("1111111");
		user.setNickname("lnndjj");
		user.setPassword("lnnpwd");
		user.setRegistTime(new Date());
		ObjectMapper objectMapper=new ObjectMapper();
		//把对象转成json
		String jsonUser =objectMapper.writeValueAsString(user);
		//把json转成对象
		SysUser u= objectMapper.readValue(jsonUser, SysUser.class);
		//把json转成List
		JavaType javaType=objectMapper.getTypeFactory().constructParametricType(List.class ,SysUser.class);
		List<SysUser> userList=objectMapper.readValue(jsonUser, javaType);
		
		return strRedis.opsForValue().get("name") ;
	
	} 
}

常用方法

stringRedis.opsForValue().set("liunn", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间  

stringRedis.boundValueOps("liunn").increment(-1);//val做-1操作

stringRedis.opsForValue().get("liunn")//根据key获取缓存中的val

stringRedis.boundValueOps("liunn").increment(1);//val +1

stringRedis.getExpire("liunn")//根据key获取过期时间

stringRedis.getExpire("liunn",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位 

stringRedis.delete("liunn");//根据key删除缓存

stringRedis.hasKey("liunn");//检查key是否存在,返回boolean值,哈希,就是键值对。

stringRedis.opsForSet().add("liunnTestOne", "1","2","3");//向指定key中存放set集合

stringRedis.expire("liunn",1000 , TimeUnit.MILLISECONDS);//设置过期时间

stringRedis.opsForSet().isMember("liunn", "1")//根据key查看集合中是否存在指定数据

stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合

StringRedisTemplate与RedisTemplate区别点

  • 两者的关系是StringRedisTemplate继承RedisTemplate。

  • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

  • 其实他们两者之间的区别主要在于他们使用的序列化类:

    RedisTemplate使用的是JdkSerializationRedisSerializer    存入数据会将数据先序列化成字节数组然后在存入Redis数据库。 

      StringRedisTemplate使用的是StringRedisSerializer

  • 使用时注意事项:

   当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。

   但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

  • RedisTemplate使用时常见问题:

    redisTemplate 中存取数据都是字节数组。当redis中存入的数据是可读形式而非字节数组时,使用redisTemplate取值的时候会无法获取导出数据,获得的值为null。可以使用 StringRedisTemplate 试试。

RedisTemplate中定义了5种数据结构操作

redisTemplate.opsForValue();  //操作字符串
redisTemplate.opsForHash();   //操作hash
redisTemplate.opsForList();   //操作list
redisTemplate.opsForSet();    //操作set
redisTemplate.opsForZSet();   //操作有序set

参考了:https://www.cnblogs.com/slowcity/p/9002660.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值