好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

java redisTemplate 的 Operations存取list集合

一 、存取为list类型

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

@RestController

@RequestMapping ( "/test" )

@Slf4j

public class TestController {

 

     @Autowired

     private RedisTemplate redisTemplate;

 

     @ApiOperation ( "redis-savelist" )

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

     public void redisSaveList() {

         List<Person> list = getPersonList();

         //清空

         while (redisTemplate.opsForList().size( "oowwoo" ) > 0 ){

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

         }

         //存储

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

 

         //取出

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

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

         Iterator<Person> it = oowwoo.iterator();

         while (it.hasNext()){

             Person p = it.next();

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

         }

     }

 

     private List<Person> 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<Person> list = new ArrayList<>();

         list.add(p1);

         list.add(p2);

         list.add(p3);

         return list;

     }

}

二 、将list转为json对象存取

?

1

2

3

4

5

6

7

8

9

10

11

12

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

   @Autowired

     private StringRedisTemplate stringRedisTemplate;

 

//存

List<Long> businessIdList = eeFreecarriageShopService.selectBusinessIdInPromotion();

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

 

//取

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

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

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

redis

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

Redis 是一个开源的使用 ANSI 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

首先需要导入相关的依赖

?

1

2

3

4

< dependency >

     < groupId >org.springframework.boot</ groupId >

     < artifactId >spring-boot-starter-data-redis</ artifactId >

</ dependency >

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

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

第一种

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

@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;

     }

     @Resource

     private RedisTemplate<String, String> redisTemplate;

     public void setToken(String key, String token) {

         ValueOperations<String, String> value = redisTemplate.opsForValue();

         value.set(ONLINE_OPERRATOR + key, token);

     }

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

         ValueOperations<String, String> 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();

     }

}

第二种

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

@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<String, String> redisTemplate(RedisConnectionFactory factory) {

         RedisTemplate<String,String> redisTemplate = new RedisTemplate<String, String>();

         redisTemplate.setConnectionFactory(factory);

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

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

         //或者JdkSerializationRedisSerializer序列化方式;

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

         redisTemplate.setKeySerializer(redisSerializer);

         redisTemplate.setHashKeySerializer(redisSerializer);

         return redisTemplate;

     }

}

接下来上操作

?

1

2

3

4

5

6

public void test01() {

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

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

     System.out.println(test);

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

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/qq_31024823/article/details/81233752

查看更多关于java 用redisTemplate 的 Operations存取list集合操作的详细内容...

  阅读:35次