-
需求:
- 使用 redis 存储用户详细信息:
{ "birthday":1557743055507, "ename":"zhangsan", "districtId":2, "sex":1,"id":1, "edate":1557743055507, "age":18,"sal":8000.0 }
- 使用 redis 存储用户详细信息:
-
使用 string 类型的问题:
- 假设有 user 对象以 JSON 序列化的存储到 Redis 中,User 对象有 id、username、password 等属性
- 当业务上只修改 age 属性,不修改其他属性,使用 string 传输和处理时会造成资源浪费
-
hash 介绍:
- hash 叫散装队列,它提供了字段和字段值的映射
- 字段值只能是字符串类型,不支持散装类型、集合类型
-
命令:
- 赋值与取值:
hset key field value #一次只能设置一个值 hget key field value #一次只能获取一个 key hmset key field value field value #一次可以设置多个值 hmget key field field #一次可以获取多个字段值 hgetall #获取所有字段值
- 设置单个值:
- 设置多个值:
- 获取所有值:
- 设置单个值:
- 判断字段是否存在
hexists key field #判断字段是否存在 hsetnx key field value #当字段不存在时赋值,当字段存在时不进行任何操作
- 删除字段:
- 可以删除一个或多个字段,返回值是被删除的字段个数
hdel key field field … #删除一个或多个字段
- 可以删除一个或多个字段,返回值是被删除的字段个数
- 只获取字段名或字段值:
hkeys key #获取所有字段名 hvals key #获取所有字段值
- 获取字段数量:
hlen key #获取字段数量
- 赋值与取值:
-
应用:
package com.qcby.config.test; import com.qcby.config.RedisUtil; import org.junit.Test; import redis.clients.jedis.Jedis; import java.util.*; public class HashTest { @Test public void testHash(){ Jedis jedis = RedisUtil.getJedis(); try { Map<String,String> pairs = new HashMap<>(); pairs.put("name","张三"); pairs.put("age","23"); pairs.put("sex","男"); jedis.hmset("kid",pairs); System.out.println("Map 中 name:" + jedis.hmget("kid","name")); //删除 map 中的某个键 jedis.hdel("kid","age"); //此时应返回 null System.out.println("获取已经删除的 age:" + jedis.hmget("kid","age")); //返回键中存放值的个数 System.out.println("kid 中值的个数:" + jedis.hlen("kid")); System.out.println("kid 是否为 user:" + jedis.exists("kid")); System.out.println("所有 key:" + jedis.hkeys("kid")); System.out.println("所有vallue:" + jedis.hvals("kid")); Iterator<String> iterator = jedis.hkeys("kid").iterator(); while (iterator.hasNext()){ System.out.println(iterator.next() + ":" + jedis.hmget("kid",iterator.next())); } List<String> values = jedis.lrange("messages",0,-1); values = jedis.hmget("ked",new String[] {"name","age","sex"}); System.out.println("List 列表:" + values); Set<String> setValue = jedis.zrange("hackers",0,-1); setValue = jedis.hkeys("kid"); System.out.println("Set 列表:" + setValue); pairs = jedis.hgetAll("kid"); System.out.println("pairs:" + pairs); //清空数据 System.out.println("清空数据:" + jedis.flushDB()); //添加数据 jedis.hset("hashs","entryKey","entryValue"); jedis.hset("hashs","entryKey2","entryValue2"); jedis.hset("hashs","entryKey3","entryValue3"); System.out.println("判断 entryKey 值是否存在:" + jedis.hexists("hashs","entryKey")); //获取指定的值 System.out.println("获取指定的值:" + jedis.hmget("hashs","entryKey")); System.out.println("批量获取指定的值:" + jedis.hmget("hashs","entryKey","entryKey1")); //删除指定的值 System.out.println("删除 entryKey:" + jedis.del("hashs","entryKey")); System.out.println(" field 域增量:" + jedis.hincrBy("hashs","entryKey",133l)); System.out.println("获取所有的 keys:" + jedis.hkeys("hashs")); System.out.println("获取所有的 values:" + jedis.hvals("hashs")); }catch (Exception e){ e.printStackTrace(); }finally { RedisUtil.closeJedis(jedis); } } }
09-07
9435

04-11
630
