Redis场景用法一、列表类(订单列表)

  • 一、使用场景介绍

    有些场景,用户会频繁请求 自己的列表类信息,可以将此类信息放到Redis里,以订单列表为例。

  • 二、功能原理分析
  1. 订单详情用hash结构存储。Redis 里的 hash 是key--value(Map)形式,这中形式可以充当二维表结构。以hash的方式存储对象数据,相对于String的key-value数据可以更加集约的利用内存结构。读取的时候,可以通过订单ID直接得到Map,解析封装成对象。

    如图所示:
  2. 订单列表用List结构存储。Redis里的List结构是以key-value(ArrayList)形式,这种队列方式,可以灵活的PUSH和POP,根据业务灵活的掌握,先进先出,还是先进后出。举个列子 比如说:订单以时间顺序排序(时间由近及远),那么就订单生成后 可以用LPUSH的方式将订单插入LIST。调用列表的时候, 直接从左到右(LRANGE,0,-1)排序调出所有列表。

    如图所示:

  • 三、demo实例

    

/**
 * @Auther: DBG_zxx
 * @Date: 2019/1/2 18:34
 * @Desc: Redis订单列表的DEMO
 */
public class OrderList {

    final static String KEY_ORDER_ID = "orderId_";
    final static String KEY_ORDER_LIST = "order_list";

    final static JedisUtils jedis = new JedisUtils(Basic.ip, Basic.port, Basic.auth);

    // 批量插入 订单
    public static void batchAddOrderDetails(List<Map<String,String>> orders) {
        orders.forEach(order ->{
            if (StringUtils.isNotBlank(order + "")){
                if (StringUtils.isNotBlank(order.get("orderId") + "")){
                    String redisOrderId = KEY_ORDER_ID + order.get("orderId").toString();
                    jedis.hmset(redisOrderId ,order);
                    if ("OK".equals(jedis.hmset(redisOrderId ,order))){
                        System.out.println("插入订单ID为 : " +redisOrderId + "成功");
                    }
                    lpushOrderId(redisOrderId);
                }
            }
        });
        System.out.println("-----------------------------------------------------");
    }

    public static Long lpushOrderId(String order){
        return jedis.lpush(KEY_ORDER_LIST , order);
    }

    public static void orderList(String orderListKey){
        List<String> orderList = jedis.lrange(orderListKey , 0 , -1);
        System.out.println("订单列表为:");
        orderList.forEach(orderId -> {
            System.out.println(orderId);
        });
        System.out.println("-----------------------------------------------------");
    }

    public static void orderDetails(String orderId){
        Map<String ,String > orderDetails = jedis.hgetall(orderId);
        System.out.println("订单详情:");
        orderDetails.forEach((k,v) ->System.out.println(k+" : "+v));
    }

    public static void main(String[] args) {
        List<Map<String ,String >> orderList = new ArrayList<>();
        orderList.add(obj2Map(new Order("1", "36.6" , "2018-01-01")));
        orderList.add(obj2Map(new Order("2", "38.6" , "2018-01-01")));
        orderList.add(obj2Map(new Order("3", "39.6" , "2018-01-01")));
        // 批量插入订单
        batchAddOrderDetails(orderList);
        // 查询订单列表
        orderList(KEY_ORDER_LIST);
        // 根据订单Id查询订单详情
        orderDetails(KEY_ORDER_ID+1);

    }

    public static Map<String ,String > obj2Map(Order order){
        Map<String ,String > map = new HashMap<>();
        map.put("orderId",order.getOrderId());
        map.put("money",order.getMoney());
        map.put("money",order.getTime());
        return map;
    }

    static class Order{

        private String orderId;
        private String money;
        private String time;

        public Order(String orderId, String money, String time) {
            this.orderId = orderId;
            this.money = money;
            this.time = time;
        }

        public String getOrderId() {
            return orderId;
        }

        public void setOrderId(String orderId) {
            this.orderId = orderId;
        }

        public String getMoney() {
            return money;
        }

        public void setMoney(String money) {
            this.money = money;
        }

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        @Override
        public String toString() {
            return "Order{" +
                    "orderId='" + orderId + '\'' +
                    ", money='" + money + '\'' +
                    ", time='" + time + '\'' +
                    '}';
        }
    }

}

猜你喜欢

转载自www.cnblogs.com/DBGzxx/p/10212102.html