zoukankan      html  css  js  c++  java
  • Redis学习笔记(4)-List

    package cn.com;
    
    import java.util.List;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.BinaryClient.LIST_POSITION;
    
    
    public class Redis_List {
    	public static Jedis redis = new Jedis("localhost", 6379);// 连接redis
    	
    	
    	
    	/**
    	 * 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
    	 * */
    	public static void lrange(){
    		redis.flushDB();//清除数据
    		/**初始化数据*/
    		redis.lpush("languages", "english","chain");
    		redis.lpush("languages", "english"); 
    		
    		
    		/**取数据*/
    		List<String> list=redis.lrange("languages", 0, -1);
    		for(String s:list){
    			System.out.println("s:"+s);
    		}
    	}
    	/**
    	 * 将一个或多个值 value 插入到列表 key 的表头
    	 * 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头:
    	 * 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
    	 * 当 key 存在但不是列表类型时,返回一个错误。
    	 * */
    	public static void lpush(){
    		redis.flushDB();//清除数据
    		redis.lpush("languages", "english","chain");
    		redis.lpush("languages", "english");//加入重复元素
    		redis.lpush("languages", "1","2","3");
    		List<String> list=redis.lrange("languages", 0, -1);
    		for(String s:list){
    			System.out.println("s:"+s);
    		}
    	 
    	}
    	
    	/**
    	 * LPUSHX key value
    	 * 将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
    	 * 和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。
    	 * */
    	public static void lpushx(){
    		redis.flushDB();//清除数据
    		redis.lpushx("languages", "english");
    		List<String> list=redis.lrange("languages", 0, -1);
    		for(String s:list){
    			System.out.println("s:"+s);
    		}
    	}
    	
    	/**
    	 * RPUSH key value [value ...]
    	 * 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
    	 * 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。
    	 * 当 key 存在但不是列表类型时,返回一个错误。
    	 * */
    	public static void rpush(){
    		redis.flushDB();//清除数据
    		redis.rpush("languages", "english","chain");
    		redis.rpush("languages", "english");//加入重复元素
    		redis.rpush("languages", "1","2","3");//加入重复元素
    		List<String> list=redis.lrange("languages", 0, -1);
    		for(String s:list){
    			System.out.println("s:"+s);
    		}
    	}
    	
    	/**
    	 * LPUSHX key value
    	 * 将值 value 插入到列表 key 的尾,当且仅当 key 存在并且是一个列表。
    	 * 和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。
    	 * */
    	public static void rpushx(){
    		redis.flushDB();//清除数据
    		redis.rpush("languages", "1","2","3");//加入重复元素
    		redis.rpushx("languages", "english");
    		List<String> list=redis.lrange("languages", 0, -1);
    		for(String s:list){
    			System.out.println("s:"+s);
    		}
    	}
    	
    	/**
    	 * 移除并返回列表 key 的头元素。
    	 * 当 key 不存在时,返回 nil 。
    	 * */
    	public static void lpop(){
    		redis.flushDB();//清除数据
    		redis.lpush("languages", "1","2","3","4","5");
    		String str=redis.lpop("languages");
    		List<String> list=redis.lrange("languages", 0, -1);
    		
    		System.out.println("被移除的元素:"+str);
    		
    		System.out.println("剩下的元素列表:");
    		for(String s:list){
    			System.out.print(""+s+" ");
    		}
    	}
    	
    	/**
    	 * 移除并返回列表 key 的尾元素。
    	 * 当 key 不存在时,返回 nil 。
    	 * */
    	public static void rpop(){
    		redis.flushDB();//清除数据
    		redis.lpush("languages", "1","2","3","4","5");
    		String str=redis.rpop("languages");
    		List<String> list=redis.lrange("languages", 0, -1);
    		
    		System.out.println("被移除的元素:"+str);
    		
    		System.out.println("剩下的元素列表:");
    		for(String s:list){
    			System.out.print(""+s+" ");
    		}
    	}
    	
    	/**
    	 * 如果给定 key 内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,
    	 * 并和被弹出元素所属的列表的名字一起,组成结果返回给调用者
    	 * */
    	public static void blpop(){
    		redis.flushDB();//清除数据
    		//redis.lpush("languages", "a","b","c","d","e");//初始化数据
    		redis.lpush("base", "a","b","c","d");//初始化数据
    		List<String> list=redis.blpop(1000,"base");
    		for(String s:list){
    			System.out.println(s+" ");
    		}
    		List<String> list2=redis.lrange("base", 0, -1);
    		for(String s:list2){
    			System.out.println("剩余"+s+" ");
    		}
    	}
    	
    	/**
    	 * 如果给定 key 内至少有一个非空列表,那么弹出遇到的第一个非空列表的尾元素,
    	 * 并和被弹出元素所属的列表的名字一起,组成结果返回给调用者
    	 * */
    	public static void brpop(){
    		redis.flushDB();//清除数据
    		 
    		redis.lpush("base", "a","b","c","d");//初始化数据
    		List<String> list=redis.brpop(1000,"base");
    		for(String s:list){
    			System.out.println(s+" ");
    		}
    		List<String> list2=redis.lrange("base", 0, -1);
    		for(String s:list2){
    			System.out.println("剩余"+s+" ");
    		}
    	}
    	
    	/**
    	 * 从头部弹出一个元素,将弹出的数据放入新的数组中  与方法 (rpoplpush)相同使用
    	 * 当列表 source 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令为止。
    	 * 超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
    	 * */
    	public static void brpoplpush(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d");//初始化数据
    		String s=redis.brpoplpush("base", "dest",0);
    	 
    		System.out.println("s:"+s);
    		List<String> list=redis.lrange("base", 0, -1);
    		for(String str:list){
    			System.out.println("base list"+str+" ");
    		}
    		List<String> list1=redis.lrange("dest", 0, -1);
    		for(String str:list1){
    			System.out.println("dest list:"+str+" ");
    		}
    	}
    	
    	/**
    	 * 从头部弹出一个元素,将弹出的数据放入新的数组中
    	 * */
    	public static void rpoplpush(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d");//初始化数据
    		String s=redis.rpoplpush("base", "dest");
    		System.out.println("弹出的元素:"+s);
    		List<String> list=redis.lrange("base", 0, -1);
    		for(String str:list){
    			System.out.println("base list"+str+" ");
    		}
    		List<String> list1=redis.lrange("dest", 0, -1);
    		for(String str:list1){
    			System.out.println("dest list:"+str+" ");
    		}
    	}
    	
    	/**
    	 * LREM key count value
    	 * 根据参数 count 的值,移除列表中与参数 value 相等的元素。
    	 * count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
    	 * count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
    	 * count = 0 : 移除表中所有与 value 相等的值。
    	 * */
    	public static void lrem(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d","e","f","g","h");//初始化数据
    		
    		Long index=redis.lrem("base", 0, "a");//移除与 集合里面有a的元素
    		System.out.println(index);
    		
    		List<String> list=redis.lrange("base", 0, -1);
    		System.out.println("========剩余元素==========");
    		for(String str:list){
    			System.out.println( str+" ");
    		}
    	}
    	
    	/**
    	 * LSET key index value
    	 *将列表 key 下标为 index 的元素的值设置为 value 。
    	 *当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。
    	 * */
    	public static void lset(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d","e","f","g","h");//初始化数据
    		redis.lset("base", 6, "2b");//将b元素设置为2b
    		
    		List<String> list=redis.lrange("base", 0, -1);
    		for(String s:list){
    			System.out.println(s);
    		}
    	}
    	
    	/**
    	 * 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
    	 * 举个例子,执行命令 LTRIM list 4 6 ,表示只保留列表 list 的4 到 6 元素,其余元素全部删除。
    	 * */
    	public static void ltrim(){
    		redis.flushDB();//清除数据
    		String [] s=new String[]{"a","b","c","d","e","f","g","h"};
    		redis.lpush("base", s);//初始化数据
    		redis.ltrim("base", 4, 6);//值保留b,c,d 对应的索引是4,5,6 多有被保留下来
    		
    		List<String> list=redis.lrange("base", 0, -1);
    		for(String str:list){
    			System.out.println(str);	
    		}
    	}
    	
    	/**
    	 * 返回列表 key 的长度。
    	 * 如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
    	 * 如果 key 不是列表类型,返回一个错误
    	 * */
    	public static void llen(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d","e","f","g","h");//初始化数据
    		
    		Long length=redis.llen("base");
    		System.out.println("长度:"+length);
    	}
    	
    	/**
    	 * 返回列表 key 中,下标为 index 的元素。
    	 * 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
    	 * 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
    	 * 如果 key 不是列表类型,返回一个错误。
    	 * */
    	public static void lindex(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d","e","f","g","h");//初始化数据
    		String s=redis.lindex("base", 2);
    		System.out.println(s);
    	}
    	
    	/**
    	 * LINSERT key BEFORE|AFTER pivot value
    	 * 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
    	 * 当 pivot 不存在于列表 key 时,不执行任何操作。pivot 指的数组中的元素
    	 * 当 key 不存在时, key 被视为空列表,不执行任何操作。
    	 * 如果 key 不是列表类型,返回一个错误。
    	 * */
    	public static void linsert(){
    		redis.flushDB();//清除数据
    		redis.lpush("base", "a","b","c","d","e","f","g","h");//初始化数据
    		redis.linsert("base", LIST_POSITION.BEFORE, "b", "2b");//在b 之前插入2b
    		//redis.linsert("base", LIST_POSITION.AFTER, "b", "2b");//在b 之后插入2b
    		List<String> list=redis.lrange("base", 0, -1);
    		for(String str:list){
    			System.out.println(str);	
    		}
    		
    	}
    	
    	public static void main(String [] args){
    		
    		linsert();
    	}
    }
    

      

  • 相关阅读:
    php intval()函数
    MVC开发模式
    Session详解
    JSP入门
    Response中文乱码问题
    cookie入门
    idea实现更改servlet模板
    使用new和newInstance()创建类的区别
    Servlet 3.0 新特性详解
    web Servlet 3.0 新特性之web模块化编程,web-fragment.xml编写及打jar包
  • 原文地址:https://www.cnblogs.com/zuolun2017/p/5607910.html
Copyright © 2011-2022 走看看