• Redis(RedisTemplate)使用list链表


    RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html

    package com.wbg.springRedis.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.data.redis.connection.RedisListCommands;
    import org.springframework.data.redis.core.RedisTemplate;
    
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    public class TestList {
        static RedisTemplate redisTemplate = null;
    
        public static void main(String[] args) throws UnsupportedEncodingException {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-redis.xml");
            redisTemplate = applicationContext.getBean(RedisTemplate.class);
            //删除链表
            if (redisTemplate.hasKey("list"))
                redisTemplate.delete("list");
            //那node3插入到list链表
            redisTemplate.opsForList().leftPush("list", "node1");
            print();
            List<String> list = new ArrayList<>();
            for (int i = 2; i < 5; i++) {
                list.add("node" + i);
            }
            //相当lpush把多个值从左插入到链表
            redisTemplate.opsForList().leftPushAll("list", list);
            print();
            //右边插入一个节点
            redisTemplate.opsForList().rightPushAll("list", "node6");
            //获取下标为0的节点
            System.out.println(redisTemplate.opsForList().index("list", 0));
            //获取链表的长度
            System.out.println(redisTemplate.opsForList().size("list"));
            //弹出(删除)左边一个节点
            System.out.println(redisTemplate.opsForList().leftPop("list"));
            //弹出(删除)右边一个节点
            System.out.println(redisTemplate.opsForList().rightPop("list"));
            print();
    
            //需要使用更为底层的命令才能操作linsert命令
            //在node2前插入before_node节点  RedisListCommands.Position.BEFORE,
            redisTemplate.getConnectionFactory().getConnection().lInsert(
                    "list".getBytes("utf-8"),
                    RedisListCommands.Position.BEFORE,
                    "node2".getBytes("utf-8"),
                    "before_node".getBytes("utf-8")
            );
            print();
            //在node2后插入after_node节点  RedisListCommands.Position.AFTER,
            redisTemplate.getConnectionFactory().getConnection().lInsert(
                    "list".getBytes("utf-8"),
                    RedisListCommands.Position.AFTER,
                    "node2".getBytes("utf-8"),
                    "after_node".getBytes("utf-8")
            );
            print();
            //如果list存在  左边插入
            redisTemplate.opsForList().leftPushIfPresent("list", "leftEx");
            //如果list存在  右边插入
            redisTemplate.opsForList().rightPushIfPresent("list", "rightEx");
            //左到右  下获取标从0-10节点元素
            list = redisTemplate.opsForList().range("list", 0, 5);
            System.out.println(list);
            //左到右删除多个node节点
            redisTemplate.opsForList().remove("list", 3, "node");
            //给链表下标设置新值
            redisTemplate.opsForList().set("list", 0, "new_value");
            print();
    
    
            /*-------------------Spring对Redis阻塞命令的操作--------*/
            //清空数据
            redisTemplate.delete("list");
            redisTemplate.delete("list1");
            List<String> nodeList = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                nodeList.add("node"+i);
            }
    
            redisTemplate.opsForList().leftPushAll("list1",nodeList);
            //相当与blpop命令  可以设置时间参数
            redisTemplate.opsForList().leftPop("list1",1, TimeUnit.SECONDS);
            redisTemplate.opsForList().leftPop("list1",1, TimeUnit.SECONDS);
            nodeList.clear();
            for (int i = 0; i < 2; i++) {
                nodeList.add("data"+i);
            }
            redisTemplate.opsForList().leftPushAll("list",nodeList);
            redisTemplate.opsForList().rightPopAndLeftPush("list","list1");
            redisTemplate.opsForList().rightPopAndLeftPush("list","list1",1,TimeUnit.SECONDS);
    
        }
    
        public static void print() {
            System.out.println(redisTemplate.opsForList().range("list", 0, redisTemplate.opsForList().size("list")));
        }
    }
  • 相关阅读:
    [C++][编程风格]C++命名规则
    [Android]搜索关键字飞入飞出效果 (转)
    android,性能优化,内存优化管理,高级缓存 (转)
    Java内存泄露原因详解
    Java之线程(2) 调时器
    Java之线程(1) 传统线程机制的回顾
    Hibernate(1) 阻抗不匹配
    No4.传统线程同步通信技术
    Android内存溢出
    MAT Memory Analyzer Tool 插件装配(图解)(转)
  • 原文地址:https://www.cnblogs.com/weibanggang/p/10189331.html
Copyright © 2020-2023  润新知