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")));
}
}

Redis(RedisTemplate)使用list链表的更多相关文章

  1. spring data redis RedisTemplate操作redis相关用法

    http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...

  2. Redis学习之底层链表源码分析

    Redis底层链表的源码分析: 一.链表结点的结构(单个结点): // listNode 双端链表节点 typedef struct listNode { // 前置节点 struct listNod ...

  3. 图解Redis之数据结构篇——链表

    前言     Redis链表为双向无环链表!     图解Redis之数据结构篇--简单动态字符串SDS提到Redis使用了简单动态字符串,链表,字典(散列表),跳跃表,整数集合,压缩列表这些数据结构 ...

  4. spring mvc Spring Data Redis RedisTemplate [转]

    http://maven.springframework.org/release/org/springframework/data/spring-data-redis/(spring-data包下载) ...

  5. springboot整合redis——redisTemplate的使用

    一.概述 相关redis的概述,参见Nosql章节 redisTemplate的介绍,参考:http://blog.csdn.net/ruby_one/article/details/79141940 ...

  6. Redis(RedisTemplate)运算、算法(incr、decr、increment)

    RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html package com.wbg.springRedis.test ...

  7. Redis(RedisTemplate)使用hash哈希

    RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html package com.wbg.springRedis.test ...

  8. Redis设计与实现 -- 链表与字典

    1. 链表 1.1 链表的结构 在 Redis 中,链表的实现是双向链表,除此之外与常规的链表不同的是它还有三个函数指针,dup 函数用于复制链表节点所保存的值,free 函数用于释放链表节点保存的值 ...

  9. Redis 底层数据结构之链表

    文章参考:<Redis设计与实现>黄建宏 链表 链表提供了高效的节点重排能力,以及可以顺序访问,也可以通过增删节点灵活调整链表长度,Redis中的列表.发布订阅.慢查询.监视器等功能均用到 ...

随机推荐

  1. gc原理小结

    一.相关概念 基本回收算法 1. 引用计数(Reference Counting) 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0 ...

  2. 关于 ie9 不执行 js 的问题

    当写js用 console.log()调试,但没有注释,在ie 9 浏览器上运行时,console.log()  后面的脚本不能再执行了. 为了ie,记得把console.log() 注释

  3. hack (浏览器兼容css hack)

    1.hack的原理 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内 ...

  4. 常用APDU指令错误码

    状态码 性质 错误解释 9000 正常 成功执行 6200 警告 信息未提供 6281 警告 回送数据可能出错 6282 警告 文件长度小于Le 6283 警告 选中的文件无效 6284 警告 FCI ...

  5. 删除List中指定的元素

    删除List中指定的元素 CopyOnWriteArrayList是ArrayList的一个线程安全的变体实现,即可在多线程并发环境中使用 List<Map<String, Object& ...

  6. 微信小程序——初始化一个小程序项目

    最近准备学习一下微信小程序,因为之前有react native项目经验,学习起来应该困难不大 微信小程序官网地址:https://mp.weixin.qq.com/debug/wxadoc/dev/i ...

  7. CSS media query应用中的层叠特性使用最佳实践

    media query是css3规范中引入的,它提供了一种responsive design的基础机制:浏览器在不同size的设备中将以不同样式展现网页,这就给一个网页能够适应不同device一种可能 ...

  8. MEGER sentence in oracle

    MEGE Sentence This oracle tutorial explains how to use the oralce MEGER sentence with syntax and sam ...

  9. mysql登录:access denied for user 'root'@'localhost'(using password:YES)

    mysql登录: access denied for user 'root'@'localhost'(using password:YES) 解决: use mysql; select user,ho ...

  10. 第一周 day1 Python学习笔记

    为什么要学习Python? Python擅长的领域 1. python2.x中不支持中文编码,默认编码格式为ASCII码,而python3.x中支持Unicode编码,支持中文,变量名可以为中文,如: ...