接口IRedisDaoHash:

package com.net.test.redis.base.dao;

import com.net.test.redis.base.entity.UserPsg;

/**
* @author ***
* @Time:2017年8月9日 下午1:43:23
* @version 1.0
* @description redis的哈希操作
*/
public interface IRedisDaoHash { public void set(String key,UserPsg psg);
public void get(String key,String hKye);
public void setClazz(String key,Object cls); public void getKeys(String key);
public void getValues(String key); public void length(String key);
public void exists(String key,String hashKey);
public void delete(String key, Object...hashKeys); }

实现类:

package com.net.test.redis.base.dao.imp;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import com.net.test.redis.base.dao.IRedisDaoHash;
import com.net.test.redis.base.entity.UserPsg;
import com.net.test.redis.base.until.ClassInfo; /**
* @author ***
* @Time:2017年8月9日 下午2:04:54
* @version 1.0
* @description
*/
@Component
public class RedisDaoHashImp implements IRedisDaoHash { @Autowired
private RedisTemplate<String, String> redis; /**
* @description 设置hash的键、属性和值。此方法写的比较死,无法做到通用
* @param key
* @param psg
*/
@Override
public void set(String key, UserPsg psg)
{
HashOperations<String, String, Object> oper = redis.opsForHash();
oper.put(key, "address", psg.getAddress());
oper.put(key, "phone", psg.getPhone());
} /**
* @description 此方法利用反射技术,做到了任何pojo都可以通用此方法(目前不支持内置对象,好像redis也不支持内置对象)
* @param key
* @param object
*/
@Override
public void setClazz(String key, Object object)
{
HashOperations<String, String, Object> oper = redis.opsForHash();
ClassInfo info = new ClassInfo();
Map<String, String> map;
try {
map = info.getFieldsByClass(object);
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator();iter.hasNext();)
{
String hKey = iter.next();
String hValue = map.get(hKey);
oper.put(key, hKey, hValue);
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* @description 根据hash的键(key)和属性(hKye)查询出对应的属性
* @param key
* @param hKye
*/
@Override
public void get( String key, String hKye)
{
HashOperations<String, String, Object> oper = redis.opsForHash();
String value = (String) oper.get(key, hKye);
System.out.println("hash 的get方法获取值 :" + value);
} /**
* @description 获取键(key)下面的所有属性
* @param key
*/
@Override
public void getKeys(String key) {
HashOperations<String, String, Object> oper = redis.opsForHash();
Set<String> set = oper.keys(key); System.out.println( key + "下面的键有:");
for(Iterator<String> iter = set.iterator();iter.hasNext();)
{
String _key = iter.next();
System.out.println(_key);
}
} /**
* @description 获取键(key)下面的所有值
* @param key
*/
@Override
public void getValues(String key)
{
HashOperations<String, String, Object> oper = redis.opsForHash();
List<Object> list = oper.values(key); System.out.println( key + "下面的键有:");
for(Iterator<Object> iter = list.iterator();iter.hasNext();)
{
String _key = iter.next().toString();
System.out.println(_key);
}
} /**
* @description 根据键获取属性个数
* @param key
*/
@Override
public void length(String key) {
HashOperations<String, String, Object> oper = redis.opsForHash();
int size = oper.size(key).intValue();
System.out.println(key + "属性共有 :"+ size);
} /**
* @description 判断键是否存在
* @param key
* @param hashKey
*/
@Override
public void exists(String key,String hashKey) {
HashOperations<String, String, Object> oper = redis.opsForHash();
boolean b = oper.hasKey(key, hashKey);
System.out.println(key + "下面的" +hashKey + "属性:" + b);
} /**
* @description 删除指定的键(key)下面的属性(hashKeys)
* @param key
* @param hashKeys
*/
@Override
public void delete(String key, Object...hashKeys) {
HashOperations<String, String, Object> oper = redis.opsForHash();
oper.delete(key,hashKeys);
} }

反射依赖方法,自己封装的:

package com.net.test.redis.base.until;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map; /**
* @author ****
* @Time:2017年8月9日 下午3:16:37
* @version 1.0
* @description 反射基类
*/ public class ClassInfo { /**
* @description 利用反射,读取pojo属性以及get**方法
* @param object
* @return
* @throws Exception
*/
public Map<String,String> getFieldsByClass(Object object) throws Exception
{
Map<String,String> map = new HashMap<String,String>();
Class<?> clazz = object.getClass();
Field[] fields = clazz.getDeclaredFields();
for(int i = 0; i < fields.length; i++)
{
String key = fields[i].getName();
String Ukey = key.replace(key.substring(0, 1), key.substring(0, 1).toUpperCase());
String value = "get" + Ukey ; Method method = clazz.getDeclaredMethod(value);
Object obj = method.invoke(object); map.put(key, obj.toString());
}
return map;
} }

Redis之Hash类型操作的更多相关文章

  1. Redis - hash类型操作

    hash 类型操作设置操作:hset:    hset key filed value        创建指定key的filed-value名值对 hsetnx:    hsetnx key file ...

  2. redis之Hash类型常用方法总结

    redis之Hash类型常用方法总结 格式: 存--HMGET key field [field ...] 取--HMGET key field [field ...] M:表示能取多个值,many ...

  3. redis的Hash类型以及其操作

    hashes类型 hashes类型及操作Redis hash是一个string类型的field和value的映射表.它的添加.删除操作都是0(1)(平均).hash特别适合用于存储对象.相较于将对象的 ...

  4. 二:redis 的hash类型相关操作

    =====================二种:hash类型================== 介绍:redis -> hash是一个string类型的field和value的映射表 hash ...

  5. python - hash类型操作

    Redis在内存中存储hash类型是以name对应一个字典形式存储的 常用操作 在name对应的hash中获取根据key获取valuehget(name,key) 在name 对应的hash 中设备键 ...

  6. StackExchange.Redis 之 hash 类型示例

    StackExchange.Redis 的组件封装示例网上有很多,自行百度搜索即可. 这里只演示如何使用Hash类型操作数据: // 在 hash 中存入或修改一个值 并设置order_hashkey ...

  7. redis的hash类型

    1.简单描述 hash是一个string类型的field和value的映射表.添加和删除操作都是O(1)(平均)的复杂度.hash类型特别适合用于存储对象.在field的数量在限制的范围内以及valu ...

  8. redis的hash类型!!!!

    Hash类型 redsi的hash是基本类型之一,键值本身又是一对键值结构,是string类型的field和value的映射表,或者说是集合,适合存储对象. Hash的增操作 127.0.0.1:63 ...

  9. python之Redis的字符串类型操作

    redis的数据类型: 字符串型    哈希     列表     集合     有序集合 1.String(字符串类型) set  命令:   设置一个键和值,键存在则只覆盖,返回ok > s ...

随机推荐

  1. (转)Linux命令学习总结:dos2unix - unix2dos

    Linux命令学习总结:dos2unix - unix2dos 命令简介: 原文:http://www.cnblogs.com/kerrycode/p/5077969.html dos2unix是将W ...

  2. sql 时间函数用法

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  3. ElasticSearch2.2.0安装(win7)

    ElasticSearch2.2.0必须在jdk1.7上才可以启动起来哦. 一.ElasticSearch2.2.0安装 1.下载ElasticSearch2.2.0安装包 https://downl ...

  4. 《大话设计模式》num02---策略模式

    2018年01月22日 22:04:57 独行侠的守望 阅读数:72更多个人分类: 设计模式编辑版权声明:本文为博主原创文章,转载请注明文章链接. https://blog.csdn.net/xiao ...

  5. 从零开始的全栈工程师——js篇2.1(js开篇)

    JS开篇 一.js介绍 全称 javascript 但不是java 他是一门前台语言 而java是后台语言js作者 布兰登·艾奇 前台语言:运行在客户端的后台语言:跟数据库有关的 能干什么?    页 ...

  6. 学习笔记:location.hash和history.pushState()

    在浏览器中改变地址栏url,将会触发页面资源的重新加载,这使得我们可以在不同的页面间进行跳转,得以浏览不同的内容.但随着单页应用的增多,越来越多的网站采用ajax来加载资源.因为异步加载的特性,地址栏 ...

  7. CSS文档优化

    首先了解下CSS的渲染逻辑,它是从标记的最后一位开始搜索的,例如:.myclass li a,首选它会遍历所有的<a>,然后看哪些<a>之前有<li>,然后再看哪些 ...

  8. 《Unity預計算即時GI》笔记:二、光照图

    说明 这篇文章是对<Unity預計算即時GI>这个系列文章的笔记. 光照图 什么是光照图 光照图在第三章中有如下的定义,读起来很是费解. 一個光照圖(Chart)是表示一個光照貼圖的區域, ...

  9. mstsc远程桌面全频或自定义窗口

    近期发现自己的mstsc突然窗口变小,总是要繁琐的拖来拖去,现终于解决了,拿来分享一二! 参数一:mstsc /f   以全屏模式显示(操作一次,后面无需在设置,具体何原因要问微软了,可能是机器的分辨 ...

  10. java Vamei快速教程05 实施接口

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部 ...