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


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

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

    private Jedis jedis;
    
    private JedisPoolConfig config;
    
    private JedisShardInfo sharInfo;
    @Bean
    public 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;
    
    /**
    * @author Administrator
    *
    */
    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);
    }
    
    
    
    
    
    /**set Object*/
    public String set(String key,Object object)
    {
    return jedis.set(key.getBytes(), SerializeUtil.serialize(object));
    }
    
    /**get Object*/
    public Object get(String key)
    {
    byte[] value = jedis.get(key.getBytes());
    return SerializeUtil. unserialize(value);
    }
    
    /**delete a 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.测试结果

    image.png
    image.png

    7.参考文章

    Springboot+Redis 配置和使用

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

  • 相关阅读:
    The new powerful SQL executing schedule monthly or weekly in DB Query Analyzer 7.01
    热烈庆祝自已厉精13年开发的 DB查询分析器 7.01(最新版本) 在中关村在线本月获得近6000次的下载量
    CentOS7下安装GitLab
    DB查询分析器7.01新增的周、月SQL执行计划功能
    Ubuntu环境下Anaconda安装TensorFlow并配置Jupyter远程访问
    Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器
    Docker学习笔记3:CentOS7下安装Docker-Compose
    CentOS7下安装python-pip
    [Flutter] 音频播放插件 audioplayers 的一个路径坑
    解放双手之自动拉取与推送
  • 原文地址:https://www.cnblogs.com/springboot/p/8907884.html
Copyright © 2020-2023  润新知