热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis学习笔记(3)Hash

packagecn.com;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.
package cn.com;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import ch.qos.logback.core.net.SyslogOutputStream;
import redis.clients.jedis.Jedis;

public class Redis_Hash {

	public static Jedis redis = new Jedis("localhost", 6379);// 连接redis
	
	public static void main(String [] args){
		hdel();
	}
	
	/**
	 * HDEL key field [field ...]
	 * 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。
	 * */
	public static void hdel(){
		redis.flushDB();//清除数据
		 
		redis.hset("user", "id", "1");
		redis.hset("user", "name", "liliang");
		redis.hset("user", "age", "18");
		System.out.println("==========删除key前数据===========");
		List users=redis.hvals("user");
		for(String u:users){
			System.out.println(u);
		}
		
		System.out.println("==========删除key后数据===========");
		redis.hdel("user","age");//删除key;可以是多个key
		List users2=redis.hvals("user");
		for(String u:users2){
			System.out.println(u);
		}
	}
	/**
	 * 返回哈希表 key 中所有域的值。
	 * 返回值:key 不存在返回空
	 * */
	public static void hvals(){
		redis.flushDB();//清除数据
		redis.hset("user", "id", "1");
		redis.hset("user", "name", "liliang");
		redis.hset("user", "age", "18");
		List users=redis.hvals("user");
		for(String u:users){
			System.out.println(u);
		}
	}
	
	/**将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
	*若域 field 已经存在,该操作无效。
	*如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令
	**/
	public static void hsetnx(){
		redis.flushDB();//清除数据
		redis.hsetnx("user","age", "18");
		String age1=redis.hget("user", "age");
		System.out.println("age1:"+age1);
		
		
		//key=user;field=age ;存在在这是则无效
		redis.hsetnx("user","age", "19");
		String age2=redis.hget("user", "age");
		System.out.println("age2:"+age2);
	}
	/**
	 *为哈希表 key 中的域 field 的值加上增量 increment 。
	 *增量也可以为负数,相当于对给定域进行减法操作。
	 *如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
	 *如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。
	 *对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
	 *本操作的值被限制在 64 位(bit)有符号数字表示之内。
	 * */
	public static void hincrby(){
		redis.flushDB();//清除数据
		
		//field 不存在初始化field  为0
		redis.hincrBy("user", "age", 18);
		String age1=redis.hget("user", "age");
		System.out.println("age1:"+age1);
		
		//对age field  进行crby 1操作
		redis.hincrBy("user", "age", 1);
		String age2=redis.hget("user", "age");
		System.out.println("age1:"+age2);
	} 
	 
	/**
	 * 方法与hincrBy 用户法一样;
	 * 此方法是操作Float 类型数据
	 * 
	 * */
	public static void hincrByFloat(){
		redis.flushDB();//清除数据
		
		//field 不存在初始化field  为0
		redis.hincrByFloat("user", "age", 18);
		String age1=redis.hget("user", "age");
		System.out.println("age1:"+age1);
		
		//对age field  进行crby 1操作
		redis.hincrByFloat("user", "age", 1.5);
		String age2=redis.hget("user", "age");
		System.out.println("age1:"+age2);
	} 
	
	/**
	 * hset 将哈希表 key 中的域 field 的值设为 value 。
	 * hget 返回哈希表 key 中给定域 field 的值。
	 * hgetAll 返回哈希表 key 中,所有的域和值。
	 * 
	 * */
	public static void hset_hget_hgetAll(){
		redis.flushDB();//清除数据
		redis.hset("user", "id", "1");
		redis.hset("user", "name", "liliang");
		redis.hset("user", "age", "18");
		
		System.out.println("==========hget============");
		System.out.println(redis.hget("user", "id"));
		System.out.println(redis.hget("user", "name"));
		System.out.println(redis.hget("user", "age"));
		
		System.out.println("=========hgetAll===========");
		Map map=redis.hgetAll("user");
		System.out.println("id:"+map.get("id"));
		System.out.println("name:"+map.get("name"));
		System.out.println("age:"+map.get("age"));
	}
	
	
	/**
	 * HMSET key field value [field value ...]
	 * 同时将多个 field-value (域-值)对设置到哈希表 key 中。
	 * 此命令会覆盖哈希表中已存在的域。
	 * 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。
	 * */
	public static void hmset_hmget(){
		redis.flushDB();//清除数据
		Map map=new HashMap();
		map.put("id","1");
		map.put("name","liliang");
		map.put("age","18");
		redis.hmset("user", map);
		
		System.out.println("======HMGET==========");
		List list=redis.hmget("user","id","name","age");
		for(String s:list){
			System.out.println("s:"+s);
		}
	}
	
	/**
	 * HLEN key
	 * 返回哈希表 key 中域的数量。
	 * */
	public static void hlen(){
		redis.flushDB();//清除数据
		Map map=new HashMap();
		map.put("id","1");
		map.put("name","liliang");
		map.put("age","18");
		redis.hmset("user", map);
		
		Long length=redis.hlen("user");
		System.out.println("length:"+length);
	}
	
	/**
	 * HKEYS key
	 *返回哈希表 key 中的所有域。
	 * */
	public static void hkeys(){
		redis.flushDB();//清除数据
		Map map=new HashMap();
		map.put("id","1");
		map.put("name","liliang");
		map.put("age","18");
		redis.hmset("user", map);
		
		Set set=redis.hkeys("user");
		for(String s:set){
			System.out.println("s:"+s);
		}
	}
}

  


推荐阅读
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
  • 面向对象之3:封装的总结及实现方法
    本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有