redis怎么存儲對象

redis怎么存儲對象

redis是一個key-value存儲系統。和memcached類似,它支持存儲的value類型相對更多,包括String(字符串)、list(鏈表)、set(集合)、 zset(sorted set –有序集合)和hash(哈希類型)本文介紹了關于redis是如何存儲對象與集合的相關資料,需要的朋友可以參考下

前言

大家都知道在項目中,緩存以及mq消息隊列可以說是不可或缺的2個重要技術。前者主要是為了減輕數據庫壓力,大幅度提升性能。后者主要是為了提高用戶的體驗度,我理解的是再后端做的一個ajax請求(異步),并且像ribbmitmq等消息隊列有重試機制等功能。

這里主要講redis如何把對象,集合存入,并且取出。下面話不多說了,來一起看看詳細的介紹吧。

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();? config.setMaxIdle(1000);//最大空閑時間config.setMaxWaitMillis(1000);?//最大等待時間config.setMaxTotal(500);?//redis池中最大對象個數sharInfo?=?new?JedisShardInfo("192.168.0.100",?6379);? sharInfo.setPassword("123456");? sharInfo.setConnectionTimeout(5000);//鏈接超時時間jedis?=?new?Jedis(sharInfo);return?jedis;? }

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

spring:? ?redis:? ?database:?0? ?host:?101.132.191.77? ?port:?6379? ?password:?123456? ?pool:? ?max-idle:?8?#連接池最大連接數(使用負值表示沒有限制)? ?min-idle:?0?#?連接池中的最小空閑連接? ?max-active:?8?#?連接池最大阻塞等待時間(使用負值表示沒有限制)? ?max-wait:?-1?#?連接池中的最大空閑連接? ?timeout:?5000?#?連接超時時間(毫秒)

3.新建SerializeUtil類,這個類主要是為了將對象序列化redis當中

import?java.io.ByteArrayInputStream;? import?java.io.ByteArrayOutputStream;? import?java.io.ObjectInputStream;? import?java.io.ObjectOutputStream;/**? public?class?SerializeUtil? {? ?public?static?byte[]?serialize(Object?object)?{? ?ObjectOutputStream?oos?=?null;? ?ByteArrayOutputStream?baos?=?null;? ?try?{//?序列化baos?=?new?ByteArrayOutputStream();? ??oos?=?new?ObjectOutputStream(baos);? ??oos.writeObject(object);? ??byte[]?bytes?=?baos.toByteArray();? ??return?bytes;? ??}?catch?(Exception?e)?{? ? ??}return?null;? ?}? ?public?static?Object?unserialize(?byte[]?bytes)?{? ?ByteArrayInputStream?bais?=?null;? ?try?{? ?//?反序列化bais?=?new?ByteArrayInputStream(bytes);? ?ObjectInputStream?ois?=?new?ObjectInputStream(bais);? ?return?ois.readObject();? ??}?catch?(Exception?e)?{? ? ??}return?null;? ?}? ?}

4.我封裝了一個RedisServiceImpl類,主要是用對redis設值和取值

import?com.ys.util.redis.SerializeUtil;? import?org.springframework.beans.factory.annotation.Autowired;? import?org.springframework.data.redis.core.StringRedisTemplate;? import?org.springframework.stereotype.Service;? import?redis.clients.jedis.Jedis;? import?java.util.List;? import?java.util.Map;? import?java.util.concurrent.TimeUnit;? @Service? public?class?RedisServiceImpl? ? ?{@Autowired? ? ?private?StringRedisTemplate?stringRedisTemplate;? ?@Autowired? ?private?Jedis?jedis;? ?public?void?setStr(String?key,?String?value)?{? ?setStr(key,?value,?null);? ?}? ?public?void?setStr(String?key,?Object?value,?Long?time)? ?{if(value?==?null){? ?return;? ?}if(value?instanceof?String){? ?String?obj?=?(String)?value;? ?stringRedisTemplate.opsForValue().set(key,?obj);? ?}else?if(value?instanceof?List){? ?List?obj?=?(List)?value;? ?stringRedisTemplate.opsForList().leftPushAll(key,obj);? ?}else?if(value?instanceof?Map){? ?Map?obj?=?(Map)?value;? ?stringRedisTemplate.opsForHash().putAll(key,obj);? ?}if?(time?!=?null)? ?stringRedisTemplate.expire(key,?time,?TimeUnit.SECONDS);? ?}? ?public?Object?getKey(String?key)? ?{return?stringRedisTemplate.opsForValue().get(key);? ??}? ?public?void?delKey(String?key)?{? ?stringRedisTemplate.delete(key);? ?}? ?public?boolean?del(String?key)? ?{return?jedis.del(key.getBytes())>0;? ?}? }

5.測試redis是否ok,編寫redisController類

import?com.ys.service.impl.RedisServiceImpl;? import?com.ys.vo.IqProduct;? import?org.springframework.beans.factory.annotation.Autowired;? import?org.springframework.web.bind.annotation.RequestMapping;? import?org.springframework.web.bind.annotation.RestController;? import?java.util.ArrayList;? import?java.util.Date;? import?java.util.List;? @RestController? ? public?class?RedisServiceController? ? ?{? @Autowired? ? private?RedisServiceImpl?redisService;? @RequestMapping(value?=?"/setredis")? public?String?setredis(String?keyredis){? ?redisService.setStr(keyredis,"2018年1月26日");? ?return?"保存成功,請訪問getredis查詢redis";? }? @RequestMapping(value?=?"/setObj")? public?String?setObj(String?keyredis){? ?IqProduct?iqProduct?=?new?IqProduct();? ?iqProduct.setSort(1);? ?iqProduct.setTimestamp(new?Date().getTime());? ?iqProduct.setProductName("productname");? ?//?list.add(iqProduct);? ?redisService.set(keyredis,?iqProduct);? ?return?"保存成功,請訪問getredis查詢redis";? ?}? ?@RequestMapping(value?=?"/getObj")? ?public?Object?getObj(String?keyredis){? ?Object?object?=?redisService.get(keyredis);? ?if(object?!=null){? ?IqProduct?iqProduct?=?(IqProduct)?object;? ?System.?out.println(iqProduct.getProductName());? ?System.?out.println(iqProduct.getId());? ?System.?out.println(iqProduct.getTimestamp());? ?}return?object;? }? ?@RequestMapping(value?=?"/delObj")? ?public?boolean?delObj(String?keyredis)? ?{boolean?del?=?redisService.del(keyredis);? ??return?del;? ?}? ?@RequestMapping(value?=?"/getredis")? ?public?String?getredis(String?keyredis){? ?String?getredis?=?(String)?redisService.getKey(keyredis);? ?return?"redis的key是===&gt;"+getredis;? ?}? ?@RequestMapping(value?=?"/delredis")? ?public?String?delredis(String?keyredis){? ?redisService.delKey(keyredis);? ?return?"刪除成功,請通過getredis進行查詢";? ?}? ?@RequestMapping(value?=?"/setList")? ?public?String?setList(String?keyredis){? ?List?list?=?new?ArrayList();for?(int?i?=?0;i?iqProducts?=?(List<iqproduct>)?object;? ?for?(int?i?=?0;i<iqproducts.size><p style="margin-top: 0px; margin-bottom: 0px; padding: 5px 0px; outline: none; line-height: 30px;"><span style="line-height: 25.2px; color: rgb(255, 0, 0);"><strong>6.測試結果</strong></span></p> <p style="margin-top: 0px; margin-bottom: 0px; padding: 5px 0px; outline: none; line-height: 30px; text-align: center;"><img src="https://img.php.cn/upload/image/676/333/709/1561192082614831.jpg" title="1561192082614831.jpg" alt="1959ec2d-ffc4-492b-b8d7-d15083666ddb.jpg"></p> <p><span style="margin: 0px; padding: 0px; color: rgb(61, 70, 77); font-family: " helvetica neue sc tahoma arial sans-serif background-color: rgb><span style="margin: 0px; padding: 0px; color: rgb(61, 70, 77); font-family: " helvetica neue sc tahoma arial sans-serif background-color: rgb></span></span></p> <p><span style="margin: 0px; padding: 0px; color: rgb(61, 70, 77); font-family: " helvetica neue sc tahoma arial sans-serif background-color: rgb><span style="margin: 0px; padding: 0px; color: rgb(61, 70, 77); font-family: " helvetica neue sc tahoma arial sans-serif background-color: rgb><span style="margin: 0px; padding: 0px; color: rgb(61, 70, 77); font-family: " helvetica neue sc tahoma arial sans-serif background-color: rgb>更多Redis相關技術文章,請訪問<a href="http://www.php.cn/redis/" target="_self" style="margin: 0px; padding: 0px; color: rgb(146, 208, 80);"><span style="margin: 0px; padding: 0px;">Redis教程</span></a></span><span style="margin: 0px; padding: 0px; color: rgb(61, 70, 77); font-family: " helvetica neue sc tahoma arial sans-serif background-color: rgb>欄目進行學習!</span></span></span></p></iqproducts.size></iqproduct>

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享