您当前的位置:首页 > 电脑百科 > 数据库 > Redis

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

时间:2019-08-09 13:12:43  来源:  作者:

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设值和取值

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

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是===>"+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<10;i++){
 IqProduct iqProduct = new IqProduct();
 iqProduct.setSort(1);
 iqProduct.setTimestamp(new Date().getTime());
 iqProduct.setProductName("productname");
 list.add(iqProduct);
 }
 redisService.set(keyredis, list);
 return "保存成功,请访问getredis查询redis";
 }
 @RequestMapping(value = "/getList")
 public Object getList(String keyredis){
 Object object = redisService.get(keyredis);
 if(object !=null){
 List<IqProduct> iqProducts = (List<IqProduct>) object;
 for (int i = 0;i<iqProducts.size();i++){
 IqProduct iqProduct = iqProducts.get(i);
 System. out.println(iqProduct.getProductName());
 System. out.println(iqProduct.getId());
 System. out.println(iqProduct.getTimestamp());
 }
 }return object;
 }
 @RequestMapping(value = "/delList")
 public boolean delList(String keyredis)
 {
 boolean del = redisService.del(keyredis);return del;
 }
}

6.测试结果

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

 



Tags:redis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Tags: redis  点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  Tags: redis  点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  Tags: redis  点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  Tags: redis  点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  Tags: redis  点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  Tags: redis  点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  Tags: redis  点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  Tags: redis  点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  Tags: redis  点击:(77)  评论:(0)  加入收藏
Nginx来限制访问控制的方法有多种,nginx主要有2个模块控制,但是那些不支持自定义,非常死,在大多数场景下并不实用。今天分享一个:利用openresty+lua+redis 实现封杀频繁恶意访问I...【详细内容】
2021-08-12  Tags: redis  点击:(119)  评论:(0)  加入收藏
▌简易百科推荐
来源: my.oschina.net/xiaomu0082/blog/2990388首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应...【详细内容】
2021-12-08  Java识堂    Tags:Redis   点击:(18)  评论:(0)  加入收藏
我不知道为什么你会选择对特定数量的“错误”(或警告)如此具体。听起来您正在寻找将要发布到 Yahoo! 的某些文章的内容。 Insider (N Foos to Blah for the BlahBlah)。那说:...【详细内容】
2021-12-07  富集云科技有限公司    Tags:Redis   点击:(14)  评论:(0)  加入收藏
目录 一、背景 二、步骤 0.理论支持 1、获取数据 2、结果 3、分析数据并评估大小 三、关于repl-backlog-size 一、背景 repl-backlog-size控制这个环形缓冲区. ​ 主从断...【详细内容】
2021-11-05  弈秋的美好生活    Tags:redis   点击:(41)  评论:(0)  加入收藏
Redis 性能测试是通过同时执行多个命令实现的。1,Redis-benchmarkRedis性能命令:redis性能命令格式: redis-benchmark [option] [option value] redis 性能测试工具可选参数如...【详细内容】
2021-11-02  川石信息    Tags:Redis   点击:(41)  评论:(0)  加入收藏
1 概述数据结构和内部编码 无传统关系型数据库的 Table 模型schema 所对应的db仅以编号区分。同一 db 内,key 作为顶层模型,它的值是扁平化的。即 db 就是key的命名空间。 key...【详细内容】
2021-11-01  JavaEdge    Tags:Redis   点击:(28)  评论:(0)  加入收藏
普通java中使用引用Java redis 驱动,即可连接:import redis.clients.jedis.Jedis; public class RedisTestJava { public static void main(String[] args) { //连...【详细内容】
2021-10-13  faesuite    Tags:Redis   点击:(34)  评论:(0)  加入收藏
Redis常用的数据结构有 string list set zset hashstringstring 是 Redis 的基本的数据类型,一个 key 对应一个 value。string 类型是二进制安全的,Redis的string可以包含任...【详细内容】
2021-10-12  语霖    Tags:Redis   点击:(36)  评论:(0)  加入收藏
列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入、弹出数据,可以充当栈和队列的角色。> LPUSH fruit apple(integer) 1> RPUSH fruit banana(integer)...【详细内容】
2021-09-17  深夜敲代码    Tags:Redis   点击:(54)  评论:(0)  加入收藏
Redis持久化意义 是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你的redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 大量的请...【详细内容】
2021-08-12  小李说IT    Tags:Redis   点击:(77)  评论:(0)  加入收藏
当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库中也没有这些数据...【详细内容】
2021-07-30  随便t    Tags:缓存穿透   点击:(91)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条