第三节 List典型场景

一、心法        

        Redis列表是简单的字符串列表,按照插入顺序排序。

        可以从Redis的List类型的数据结构来考虑其实际业务场景。Redis的List这种数据结构与Java中的List集合大致不离其宗。实际上就是一个容器来存放多组数据。从其数据结构的特点上来看,符合"一对多"的特点。因此,我们可以迅速联想到,可以使用Redis来缓存"一对多"的热点数据。例如,在电商系统中,可以用于缓存某个用户的历史订单,又比如可以缓存多个收货地址。

        从我自己的公司角度的业务上来看。可以使用Redis的List来做例如 "班级-学生"、"学院-专业"、"年级-学院"等一对多的业务场景。因此,对于Redis的List这种数据结构而言,只要牢牢记住,当出现一对多的场景时,可以考虑使用List这种Redis数据结构来做热点数据的缓存。

二、代码简单过一下

        下面是我自己做的一个Redis简单工具类,本质上就是操作RedisTemplate。好多命令可以参考网上的Redis命令大全,这里不做赘述。如果有需要,查询一下API文档即可。基本上每个接口都有对应的API。

package com.tyzhou.redis.service.impl;

import com.tyzhou.redis.service.ListRedisService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhoutianyu
 * @date 2020/2/9
 * @time 13:23
 */
@Service
public class ListRedisServiceImpl implements ListRedisService {

    private static final Logger LOGGER = LoggerFactory.getLogger(ListRedisServiceImpl.class);

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Override
    public void push(String key, Object value) {
        getListOperations().rightPush(key, value);
    }

    @Override
    public List<Object> range(String key) {
        Long size = getListOperations().size(key);
        if (size != null && size > 0) {
            //对应LRANGE key start stop,这里获取所有指定key的List
            return getListOperations().range(key, 0, size);
        }
        return null;
    }

    @Override
    public Object index(int index, String key) {
        return getListOperations().index(key, index);
    }

    @Override
    public void remove(String key, Object object) {
        /**
         * count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
         */
        getListOperations().remove(key, 1, object);
    }


    private ListOperations<String, Object> getListOperations() {
        return redisTemplate.opsForList();
    }
}

        我这里假设某个用户的userId是20200202,然后为它插入了它喜欢的几本书。最后再根据这个人的userId去Redis中查询这个List。代码比较简单,大致运行效果如下:

阅读更多 

        跟着大宇学Redis--------目录帖

posted @ 2022-07-17 12:14  小大宇  阅读(25)  评论(0编辑  收藏  举报