Redis是如何存储对象和集合的

存储 存储软件 Redis
在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribbmitmq等消息队列有重试机制等功能。

在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且像ribbmitmq等消息队列有重试机制等功能。

这里主要讲redis如何把对象,集合存入,并且取出。

[[227948]]

1.在启动类上加入如下代码

  1. private Jedis jedis;private JedisPoolConfig config;private JedisShardInfo sharInfo;@Beanpublic Jedis jedis(){//连接redis服务器,192.168.0.100:6379// jedis = new Jedis("192.168.0.100", 6379);// //权限认证// jedis.auth("123456");// 操作单独的文本串config = new JedisPoolConfig(); 
  2. config.setMaxIdle(1000);//最大空闲时间config.setMaxWaitMillis(1000); //最大等待时间config.setMaxTotal(500); //redis池中最大对象个数sharInfo = new JedisShardInfo("192.168.0.100", 6379); 
  3. sharInfo.setPassword("123456"); 
  4. sharInfo.setConnectionTimeout(5000);//链接超时时间jedis = new Jedis(sharInfo);return jedis; 

2.在application.yml当中加入redis配置

  1. spring: 
  2.   redis: 
  3.     database: 0 
  4.     host: 101.132.191.77 
  5.     port: 6379 
  6.     password: 123456 
  7.     pool: 
  8.       max-idle: 8 #连接池最大连接数(使用负值表示没有限制) 
  9.       min-idle: 0 # 连接池中的最小空闲连接 
  10.       max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) 
  11.       max-wait: -1 # 连接池中的最大空闲连接 
  12.      timeout: 5000 # 连接超时时间(毫秒) 

3.新建SerializeUtil类,这个类主要是为了将对象序列化redis当中

  1. import java.io.ByteArrayInputStream; 
  2. import java.io.ByteArrayOutputStream; 
  3. import java.io.ObjectInputStream; 
  4. import java.io.ObjectOutputStream;/** 
  5. public class SerializeUtil  
  6.      public static byte[] serialize(Object object) { 
  7.         ObjectOutputStream oos = null
  8.         ByteArrayOutputStream baos = null
  9.         try {// 序列化baos = new ByteArrayOutputStream(); 
  10.             oos = new ObjectOutputStream(baos); 
  11.             oos.writeObject(object); 
  12.             byte[] bytes = baos.toByteArray(); 
  13.             return bytes; 
  14.             } catch (Exception e) { 
  15.  
  16.             }return null
  17.         } 
  18.   public static Object unserialize( byte[] bytes) { 
  19.         ByteArrayInputStream bais = null
  20.         try { 
  21.         // 反序列化bais = new ByteArrayInputStream(bytes); 
  22.         ObjectInputStream ois = new ObjectInputStream(bais); 
  23.         return ois.readObject(); 
  24.             } catch (Exception e) { 
  25.  
  26.             }return null
  27.         } 
  28.      } 

4.我封装了一个RedisServiceImpl类,主要是用对redis设值和取值

  1. import com.ys.util.redis.SerializeUtil; 
  2. import org.springframework.beans.factory.annotation.Autowired; 
  3. import org.springframework.data.redis.core.StringRedisTemplate; 
  4. import org.springframework.stereotype.Service; 
  5. import redis.clients.jedis.Jedis; 
  6. import java.util.List; 
  7. import java.util.Map; 
  8. import java.util.concurrent.TimeUnit; 
  9. @Service 
  10. public class RedisServiceImpl 
  11.  
  12.  {@Autowired   
  13.  
  14.     private StringRedisTemplate stringRedisTemplate; 
  15.     @Autowired 
  16.     private Jedis jedis; 
  17.     public void setStr(String key, String value) { 
  18.         setStr(key, value, null); 
  19.     } 
  20.     public void setStr(String key, Object value, Long time
  21.     {if(value == null){ 
  22.     return
  23.     }if(value instanceof String){ 
  24.         String obj = (String) value; 
  25.         stringRedisTemplate.opsForValue().set(key, obj); 
  26.         }else if(value instanceof List){ 
  27.         List obj = (List) value; 
  28.         stringRedisTemplate.opsForList().leftPushAll(key,obj); 
  29.         }else if(value instanceof Map){ 
  30.         Map obj = (Map) value; 
  31.         stringRedisTemplate.opsForHash().putAll(key,obj); 
  32.         }if (time != null
  33.         stringRedisTemplate.expire(keytime, TimeUnit.SECONDS); 
  34.     } 
  35.     public Object getKey(String key)  
  36.         {return stringRedisTemplate.opsForValue().get(key); 
  37.           } 
  38.     public void delKey(String key) { 
  39.         stringRedisTemplate.delete(key); 
  40.         } 
  41.     public boolean del(String key
  42.         {return jedis.del(key.getBytes())>0; 
  43.         } 

5.测试redis是否ok,编写redisController类

  1. import com.ys.service.impl.RedisServiceImpl; 
  2. import com.ys.vo.IqProduct; 
  3. import org.springframework.beans.factory.annotation.Autowired; 
  4. import org.springframework.web.bind.annotation.RequestMapping; 
  5. import org.springframework.web.bind.annotation.RestController; 
  6. import java.util.ArrayList; 
  7. import java.util.Date
  8. import java.util.List; 
  9. @RestController 
  10.  
  11. public class RedisServiceController 
  12.  
  13.  { 
  14. @Autowired 
  15.  
  16. private RedisServiceImpl redisService; 
  17. @RequestMapping(value = "/setredis"
  18. public String setredis(String keyredis){ 
  19.         redisService.setStr(keyredis,"2018年1月26日"); 
  20.         return "保存成功,请访问getredis查询redis"
  21. @RequestMapping(value = "/setObj"
  22. public String setObj(String keyredis){ 
  23.     IqProduct iqProduct = new IqProduct(); 
  24.     iqProduct.setSort(1); 
  25.     iqProduct.setTimestamp(new Date().getTime()); 
  26.     iqProduct.setProductName("productname"); 
  27.     // list.add(iqProduct); 
  28.     redisService.set(keyredis, iqProduct); 
  29.     return "保存成功,请访问getredis查询redis"
  30.     } 
  31.     @RequestMapping(value = "/getObj"
  32.     public Object getObj(String keyredis){ 
  33.         Object object = redisService.get(keyredis); 
  34.         if(object !=null){ 
  35.         IqProduct iqProduct = (IqProduct) object; 
  36.         System. out.println(iqProduct.getProductName()); 
  37.         System. out.println(iqProduct.getId()); 
  38.         System. out.println(iqProduct.getTimestamp()); 
  39.         }return object; 
  40.         @RequestMapping(value = "/delObj"
  41.         public boolean delObj(String keyredis) 
  42.         {boolean del = redisService.del(keyredis); 
  43.             return del; 
  44.         } 
  45.         @RequestMapping(value = "/getredis"
  46.         public String getredis(String keyredis){ 
  47.         String getredis = (String) redisService.getKey(keyredis); 
  48.         return "redis的key是===>"+getredis; 
  49.         } 
  50.         @RequestMapping(value = "/delredis"
  51.         public String delredis(String keyredis){ 
  52.         redisService.delKey(keyredis); 
  53.         return "删除成功,请通过getredis进行查询"
  54.         } 
  55.         @RequestMapping(value = "/setList"
  56.         public String setList(String keyredis){ 
  57.         List list = new ArrayList();for (int i = 0;i<10;i++){ 
  58.         IqProduct iqProduct = new IqProduct(); 
  59.         iqProduct.setSort(1); 
  60.         iqProduct.setTimestamp(new Date().getTime()); 
  61.         iqProduct.setProductName("productname"); 
  62.         list.add(iqProduct); 
  63.         } 
  64.         redisService.set(keyredis, list); 
  65.         return "保存成功,请访问getredis查询redis"
  66.         } 
  67.         @RequestMapping(value = "/getList"
  68.         public Object getList(String keyredis){ 
  69.         Object object = redisService.get(keyredis); 
  70.         if(object !=null){ 
  71.         List<IqProduct> iqProducts = (List<IqProduct>) object; 
  72.         for (int i = 0;i<iqProducts.size();i++){ 
  73.         IqProduct iqProduct = iqProducts.get(i); 
  74.         System. out.println(iqProduct.getProductName()); 
  75.         System. out.println(iqProduct.getId()); 
  76.         System. out.println(iqProduct.getTimestamp()); 
  77.         } 
  78.       }return object; 
  79.     } 
  80.       @RequestMapping(value = "/delList"
  81.       public boolean delList(String keyredis) 
  82.       { 
  83.       boolean del = redisService.del(keyredis);return del; 
  84.         } 

6.测试结果

责任编辑:武晓燕 来源: 编程软文
相关推荐

2017-11-01 14:29:38

2014-01-07 09:15:24

云集成云存储RESTful

2019-07-18 08:00:49

对象存储IHS Markit

2009-08-18 09:06:41

C#对象和集合

2020-08-25 07:54:50

对象存储

2020-01-21 19:44:03

云存储数据块存储

2018-01-03 08:47:12

集群NAS存储

2013-12-11 21:44:01

OpenStack对象Swift

2020-04-15 11:40:33

MySQlLServer存储

2019-08-09 16:14:33

MySQLServer存储

2020-03-17 23:08:32

数据Elasticsear存储

2021-06-26 07:29:42

RedisHashtable数据

2019-11-19 08:04:16

JavaHashSet去重

2018-03-16 09:23:34

块存储文件存储对象存储

2013-07-25 14:17:17

2011-12-28 13:30:39

云计算云存储

2012-02-01 09:21:23

Hadoop分布式文件系统OpenStack

2017-11-27 08:17:38

存储数据位置

2016-12-05 18:32:08

序列化androidjava

2017-08-29 20:19:56

对象存储架构存储数据中心
点赞
收藏

51CTO技术栈公众号