|
|
|
|
移动端

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

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

作者:sunjian来源:编程软文|2018-05-03 08:53

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

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

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

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.测试结果

【编辑推荐】

  1. 高性能的全闪存存储,为何仍然不受传统企业的钟爱
  2. 数据存储安全性:存储专业人员需要了解的内容
  3. DAS,NAS,SAN和ISCSI存储架构介绍
  4. 为什么存储密码字符数组比字符串更合适?
  5. MySQL数据库Raid存储方案
【责任编辑:武晓燕 TEL:(010)68476606】


点赞 0
分享:
大家都在看
猜你喜欢

热门职位+更多

读 书 +更多

C#2005编程进阶与参考手册

本书非常详细而全面地介绍了C#程序设计语言。本书不是“5分钟学习C#”式的手册,也不是那种教您“照猫画虎”地创建一些与您的实际工作需要...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊