虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > Redis数据库 > Redis如何存储对象与集合示例详解

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是===>"+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有序集合类型的常用命令小结
  • Redis集合类型的常用命令小结
  • Redis Set 集合的实例详解
  • Redis有序集合类型的操作_动力节点Java学院整理
  • redis哈希和集合_动力节点Java学院整理
  • redis集合类型_动力节点Java学院整理
相关热词搜索: redis 存储对象集合 redis 存储对象 redis