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

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

  1. private Jedis jedis;
  2. private JedisPoolConfig config;
  3. private JedisShardInfo sharInfo;
  4. @Bean
  5. public Jedis jedis(){
  6. //连接redis服务器,192.168.0.100:6379
  7. // jedis = new Jedis("192.168.0.100", 6379);
  8. // //权限认证
  9. // jedis.auth("123456");
  10. // 操作单独的文本串
  11. config = new JedisPoolConfig();
  12. config.setMaxIdle(1000);//最大空闲时间
  13. config.setMaxWaitMillis(1000); //最大等待时间
  14. config.setMaxTotal(500); //redis池中最大对象个数
  15. sharInfo = new JedisShardInfo("192.168.0.100", 6379);
  16. sharInfo.setPassword("123456");
  17. sharInfo.setConnectionTimeout(5000);//链接超时时间
  18. jedis = new Jedis(sharInfo);
  19. return jedis;
  20. }

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. /**
  6. * @author Administrator
  7. *
  8. */
  9. public class SerializeUtil {
  10. public static byte[] serialize(Object object) {
  11. ObjectOutputStream oos = null;
  12. ByteArrayOutputStream baos = null;
  13. try {
  14. // 序列化
  15. baos = new ByteArrayOutputStream();
  16. oos = new ObjectOutputStream(baos);
  17. oos.writeObject(object);
  18. byte[] bytes = baos.toByteArray();
  19. return bytes;
  20. } catch (Exception e) {
  21. }
  22. return null;
  23. }
  24. public static Object unserialize( byte[] bytes) {
  25. ByteArrayInputStream bais = null;
  26. try {
  27. // 反序列化
  28. bais = new ByteArrayInputStream(bytes);
  29. ObjectInputStream ois = new ObjectInputStream(bais);
  30. return ois.readObject();
  31. } catch (Exception e) {
  32. }
  33. return null;
  34. }
  35. }

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

redisServiceImpl.set主要是传object,setStr主要设置string

  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. @Autowired
  12. private StringRedisTemplate stringRedisTemplate;
  13. @Autowired
  14. private Jedis jedis;
  15. public void setStr(String key, String value) {
  16. setStr(key, value, null);
  17. }
  18. public void setStr(String key, Object value, Long time) {
  19. if(value == null){
  20. return;
  21. }
  22. if(value instanceof String){
  23. String obj = (String) value;
  24. stringRedisTemplate.opsForValue().set(key, obj);
  25. }else if(value instanceof List){
  26. List obj = (List) value;
  27. stringRedisTemplate.opsForList().leftPushAll(key,obj);
  28. }else if(value instanceof Map){
  29. Map obj = (Map) value;
  30. stringRedisTemplate.opsForHash().putAll(key,obj);
  31. }
  32. if (time != null)
  33. stringRedisTemplate.expire(key, time, 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. /**set Object*/
  42. public String set(String key,Object object)
  43. {
  44. return jedis.set(key.getBytes(), SerializeUtil.serialize(object));
  45. }
  46. /**get Object*/
  47. public Object get(String key)
  48. {
  49. byte[] value = jedis.get(key.getBytes());
  50. return SerializeUtil. unserialize(value);
  51. }
  52. /**delete a key**/
  53. public boolean del(String key)
  54. {
  55. return jedis.del(key.getBytes())>0;
  56. }
  57. }

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. public class RedisServiceController {
  11. @Autowired
  12. private RedisServiceImpl redisService;
  13. @RequestMapping(value = "/setredis")
  14. public String setredis(String keyredis){
  15. redisService.setStr(keyredis,"2018年1月26日");
  16. return "保存成功,请访问getredis查询redis";
  17. }
  18. @RequestMapping(value = "/setObj")
  19. public String setObj(String keyredis){
  20. IqProduct iqProduct = new IqProduct();
  21. iqProduct.setSort(1);
  22. iqProduct.setTimestamp(new Date().getTime());
  23. iqProduct.setProductName("productname");
  24. // list.add(iqProduct);
  25. redisService.set(keyredis, iqProduct);
  26. return "保存成功,请访问getredis查询redis";
  27. }
  28. @RequestMapping(value = "/getObj")
  29. public Object getObj(String keyredis){
  30. Object object = redisService.get(keyredis);
  31. if(object !=null){
  32. IqProduct iqProduct = (IqProduct) object;
  33. System. out.println(iqProduct.getProductName());
  34. System. out.println(iqProduct.getId());
  35. System. out.println(iqProduct.getTimestamp());
  36. }
  37. return object;
  38. }
  39. @RequestMapping(value = "/delObj")
  40. public boolean delObj(String keyredis){
  41. boolean del = redisService.del(keyredis);
  42. return del;
  43. }
  44. @RequestMapping(value = "/getredis")
  45. public String getredis(String keyredis){
  46. String getredis = (String) redisService.getKey(keyredis);
  47. return "redis的key是===>"+getredis;
  48. }
  49. @RequestMapping(value = "/delredis")
  50. public String delredis(String keyredis){
  51. redisService.delKey(keyredis);
  52. return "删除成功,请通过getredis进行查询";
  53. }
  54. @RequestMapping(value = "/setList")
  55. public String setList(String keyredis){
  56. List list = new ArrayList();
  57. 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. }
  79. return object;
  80. }
  81. @RequestMapping(value = "/delList")
  82. public boolean delList(String keyredis){
  83. boolean del = redisService.del(keyredis);
  84. return del;
  85. }
  86. }

6.测试结果

image.png

7.参考文章

Springboot+Redis 配置和使用

关注编程软文,回复领取资源.免费获得大礼包.提供一个平台,让志同道合的人可以走在一起,让我们一起进步。

redis是如何存储对象和集合的的更多相关文章

  1. Redis如何存储对象与集合示例详解

      前言 大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术.前者主要是为了减轻数据库压力,大幅度提升性能.后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异 ...

  2. redis缓存怎么存储对象

    2.把对象Object存储到redis中,怎么存?memcache存取对象是序列化和反序列化 使用通用的序列化.反序列化(频繁的会很消耗cpu,使用Google Protocol Buffer,将对象 ...

  3. Redis 存储对象信息是用 Hash 还是 String

    Redis 内部使用一个 RedisObject 对象来表示所有的 key 和 value,RedisObject 中的 type,则是代表一个 value 对象具体是何种数据类型,它包含字符串(St ...

  4. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  5. Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

    Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 ...

  6. redis存储对象

      redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列 ...

  7. redis存储对象与对象序列化详解

    redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列化接 ...

  8. Java操作Redis存储对象类型数据

    背景描述      关于JAVA去操作Redis时,如何存储一个对象的数据,大家是非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用.存储一个对象是是 ...

  9. [redis读书笔记] 第一部分 数据结构与对象 整数集合

    typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t c ...

随机推荐

  1. DBCP( 二) DataBase Connection Pool 的使用

    使用DBCP必须用的三个包: commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar. 配置参数. Java ...

  2. 转载【微信支付】jsapi支付之传参问题(使用微信官方SDK之PHP版本) V3之WxpayPubHelper 亲测有效,V3WxpayAPI_php_v3.zip版未测试,理论上也是一样的。

    本文转载至:http://blog.csdn.net/geeklx/article/details/51146151 (微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请 ...

  3. 【LeetCode】73. Set Matrix Zeroes (2 solutions)

    Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do i ...

  4. Linux命令-文件处理命令:less

    翻页查看文件命令,区别于more分页查看文件命令 less /etc/services 分页显示services文件 注意:可以使用PgUp往上翻页,上箭头往上查看行,PgDn往下翻页(或空格往下翻页 ...

  5. 工作总结 @{var sas = String.Format("{0:yyyy-MM-dd}", Model.DemandTime.GetValueOrDefault());}

      可空DateTime类型 无法Tostring 或者 格式化时间格式   需要转换 为DateTime Nullable<T>.GetValueOrDefault() 方法 返回对应的 ...

  6. android VLayout 全面解析

    概述 前不久.阿里新开源了2个东西,Atlas和vlayout.今天我来介绍下vlayout的使用. 在介绍前,先抱怨两句,阿里放开源出来,感觉就是让我们这群人给他们找bug~~我曾遇到一个奇怪的问题 ...

  7. CentOS 6.4 yum安装chrome

    CentOS 6.4安装chrome浏览器 vim /etc/yum.repos.d/CentOS-Base.repo 根据你的系统增加一个节点 32-bit [google] name=Google ...

  8. highcharts图表史上最全的参数配置(属性+事件)

    今天这里将给大家全全展现相关的参数配置: chart.events.addSeries:添加数列到图表中. chart.events.click:整个图表的绘图区上所发生的点击事件. chart.ev ...

  9. 使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

    Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的能够正常运转. 同时,内核也很公正:它将资源公平地分配给各个进程. 但是,如果你需要给一个重要进程提高优先级时, ...

  10. CentOS7 安装 mplayer

    我google找到这个方法可以简单快速安装 mplayer 和 vlc,centos 7 only. Please google the latest release for the followin ...