java 用redisTemplate 的 Operations存取list集合操作

网友投稿 1782 2022-10-07


java 用redisTemplate 的 Operations存取list集合操作

java redisTemplate 的 Operations存取list集合

一 、存取为list类型

@RestController

@RequestMapping("/test")

@Slf4j

public class TestController {

@Autowired

private RedisTemplate redisTemplate;

@ApiOperation("redis-savelist")

@PostMapping("/redis/save/list")

public void redisSaveList() {

List list = getPersonList();

//清空

while (redisTemplate.ophttp://sForList().size("oowwoo") > 0){

redisTemplate.opsForList().leftPop("oowwoo");

}

//存储

redisTemplate.opsForList().rightPushAll("oowwoo", list);

//取出

List oowwoo = redisTemplate.opsForList().range("oowwoo", 0, -1);

log.info(">>>>>>>>>>>>>>>list = {}", oowwoo.toString());

Iterator it = oowwoo.iterator();

while(it.hasNext()){

Person p = it.next();

log.info("person = {}", p.toString());

}

}

private List getPersonList() {

Person p1 = new Person();

p1.setId(1L);

p1.setName("张一");

p1.setAge(11);

Person p2 = new Person();

p2.setId(2L);

p2.setName("张二");

p2.setAge(22);

Person p3 = new Person();

p3.setId(3L);

p3.setName("张三");

p3.setAge(33);

List list = new ArrayList<>();

list.add(p1);

list.add(p2);

list.add(p3);

return list;

}

}

二 、将list转为json对象存取

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

@Autowired

private StringRedisTemplate stringRedisTemplate;

//存

List businessIdList = eeFreecarriageShopService.selectBusinessIdInPromotion();

stringRedisTemplate.opsForValue().set(RedisConstants.FREECARRIAGE_BUSINESSIDLIST, JSON.toJSON(businessIdList).toString());

//取

String businessJsonArray = stringRedisTemplate.opsForValue().get(RedisConstants.FREECARRIAGE_BUSINESSIDLIST);

List businessIdList = JSONObject.parseArray(businessJsonArray, Long.class);

redis在java中的使用,基本存取操作(RedisTemplate)

redis

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSItjDXRlZteJ C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

RedisTemplate

spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。

StringRedisTemplate与RedisTemplate

两者的关系是StringRedisTemplate继承RedisTemplate。

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

SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

set void set(K key, V value);

使用:redisTemplate.opsForValue().set("name","tom");

结果:redisTemplate.opsForValue().get("name") 输出结果为tom

set void set(K key, V value, long timeout, TimeUnit unit);

使用:redisTemplate.opsForValue().set("name","tom",10, TimeUnit.SECONDS);

结果:redisTemplate.opsForValue().get("name")由于设置的是10秒失效,十秒之内查询有结果,十秒之后返回为null

这里只讨论对string数据的使用,附上一个小demo

首先需要导入相关的依赖

org.springframework.boot

spring-boot-starter-data-redis

序列化,序列化是为了方便数据传输

这里提供两种序列化封装操作:

第一种

@Service

public class TokenServiceTask {

public static final String ONLINE_OPERRATOR = "";

/**

* redis序列化存储

*

* @param redisTemplate

*/

@SuppressWarnings({"rawtypes", "unchecked"})

@Autowired(required = false)

public void setRedisTemplate(RedisTemplate redisTemplate) {

RedisSerializer stringSerializer = new StringRedisSerializer();

redisTemplate.setKeySerializer(stringSerializer);

redisTemplate.setValueSerializer(stringSerializer);

redisTemplate.setHashKeySerializer(stringSerializer);

redisTemplate.setHashValueSerializer(stringSerializer);

this.redisTemplate = redisTemplate;

}

@ResourctjDXRlZteJe

private RedisTemplate redisTemplate;

public void setToken(String key, String token) {

ValueOperations value = redisTemplate.opsForValue();

value.set(ONLINE_OPERRATOR + key, token);

}

public void setTokenWithTime(String key, String token, long number, TimeUnit timeUnit) {

ValueOperations value = redisTemplate.opsForValue();

value.set(ONLINE_OPERRATOR + key, token, number, timeUnit);

}

public void freshTime(String key) {

redisTemplate.expire(key, 1800, TimeUnit.SECONDS);

}

public String getToken(String key) {

return redisTemplate.boundValueOps(key).get();

}

}

第二种

@Configuration

@EnableCaching //启用缓存,这个注解很重要;

public class RedisCacheConfig extends CachingConfigurerSupport {

/**

* 缓存管理器.

* @param redisTemplate

* @return

*/

@Bean

public CacheManager cacheManager(RedisTemplate,?> redisTemplate) {

CacheManager cacheManager = new RedisCacheManager(redisTemplate);

return cacheManager;

}

/**

* redis模板操作类,类似于jdbcTemplate的一个类;

*

* 虽然CacheManager也能获取到Cache对象,但是操作起来没有那么灵活;

*

* 这里在扩展下:RedisTemplate这个类不见得很好操作,我们可以在进行扩展一个我们

*

* 自己的缓存类,比如:RedisStorage类;

*

* @param factory : 通过Spring进行注入,参数在application.properties进行配置;

* @return

*/

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory factory) {

RedisTemplate redisTemplate = new RedisTemplate();

redisTemplate.setConnectionFactory(factory);

//key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误;

//所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者tjDXRlZteJ自己实现ObjectRedisSerializer

//或者JdkSerializationRedisSerializer序列化方式;

RedisSerializer redisSerializer = new StringRedisSerializer();//Long类型不可以会出现异常信息;

redisTemplate.setKeySerializer(redisSerializer);

redisTemplate.setHashKeySerializer(redisSerializer);

return redisTemplate;

}

}

接下来上操作

public void test01() {

redisTemplate.opsForValue().set("chenlianghongtest","chenlianghong",30, TimeUnit.SECONDS);

String test = redisTemplate.opsForValue().get("chenlianghongtest");

System.out.println(test);

logger.info("牛啊牛啊");

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:BM00014——|bookmarks|Openvpn2.4.9服务端/客户端部署/本地client配置/连接成功测试|
下一篇:BM00013——|bookmarks|超级伪黑客命令/cmartix/blessed-contrib|
相关文章

 发表评论

暂时没有评论,来抢沙发吧~