日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis数据类型--散列类型

發布時間:2024/9/27 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis数据类型--散列类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

夫陶公清風千古,余又何人,敢稱庶幾


文章目錄

    • 介紹
      • 一、基本命令
        • 1. 賦值與取值
        • 2. 判斷字段是否存在
        • 3.當字段不存在時賦值
        • 4.增加數字
        • 5.刪除字段
      • 二、命令進階
        • 1.只獲取字段名或字段值
        • 2. 獲得字段數量

介紹

Hashes,由field和關聯的value組成的map。field和value都是字符串的, hash 可以存儲 2^32^ - 1 鍵值對(40多億)

一、基本命令

命令介紹
HSET key field value一次設置單個鍵值
HGET key field一次獲得單個值
HMSET key field value [field value …]同時設置多個鍵值
HMGET key field [field …]同時獲取多個鍵值
HGETALL key一次獲取所有的鍵值
HEXISTS key field判斷字段是否存在
HSETNX key field value當字段不存在時賦值
HINCRBY key field increment增加數字
HDEL key field [field …]刪除字段

1. 賦值與取值

HSET key field value
HGET key field
HMSET key field value [FIELD VALUE …]
hget key field [field …]
HGETALL key // 獲取所有字段的值

  • HSET/HGET
    一次只能設置和獲取一個字段的值。
127.0.0.1:6379> hset user id 1001 (integer) 1 127.0.0.1:6379> hset user name breez (integer) 1 127.0.0.1:6379> hset user age 22 (integer) 1 127.0.0.1:6379> hget user id "1001" 127.0.0.1:6379> hget user name "breez" 127.0.0.1:6379> keys * 1) "user"

解釋:案例中user為鍵,id、name、age為屬性,在面向對象中,user相當于類,其他三個字段相當于成員屬性

實踐:使用Java操作Redis數據庫:HSET、HGET

@Testpublic void testHSETAndHGET() {Jedis jedis = new Jedis("127.0.0.1", 6379);jedis.hset("user", "id", "1001");jedis.hset("user", "name", "breez");jedis.hset("user", "age", "22");String id = jedis.hget("user", "id");String name = jedis.hget("user", "name");String age = jedis.hget("user", "age");System.out.println("id:" + id);System.out.println("name:" + name);System.out.println("name:" + age);} id:1001 name:breez name:22
  • HMSET/HMGET
    一次可以同時設置和獲取多個字段的值
127.0.0.1:6379> hmset user id 1001 name breez age 22 OK 127.0.0.1:6379> hmget user id name age 1) "1001" 2) "breez" 3) "22" 127.0.0.1:6379> hmget user id 1) "1001" 127.0.0.1:6379> hmget user name 1) "breez" 127.0.0.1:6379> hmget user age 1) "22" 127.0.0.1:6379> keys * 1) "user"
  • HGETALL
    同時獲取所有字段的值
127.0.0.1:6379> keys * 1) "user" 127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22"

實踐:使用Java操作Redis數據庫:HMSET、HMGET

@Testpublic void testHMSETAndHMGET() {Jedis jedis = new Jedis("127.0.0.1", 6379);HashMap<String, String> map = new HashMap<>();map.put("id", "1001");map.put("name", "breez");map.put("age", "22");jedis.hmset("user", map);List<String> user = jedis.hmget("user", new String[]{"id", "name", "age"});user.forEach(u -> System.out.println(u));} 1001 breez 22

2. 判斷字段是否存在

HEXISTS key field

此命令用來判斷一個字段是否存在。如果存在返回1,不能存在返回0,如果鍵不存在也返回0.

127.0.0.1:6379> keys * 1) "user" 127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22" 127.0.0.1:6379> hexists user name //name字段存在返回 1 (integer) 1 127.0.0.1:6379> hexists user other //other字段不存在返回0 (integer) 0 127.0.0.1:6379> hexists other other //other鍵不存在返回0 (integer) 0

實踐:使用Java操作Redis數據庫:HEXISTS

@Testpublic void testHEXISTS() {Jedis jedis = new Jedis("127.0.0.1", 6379);Boolean user_name = jedis.hexists("user", "name");Boolean user_other = jedis.hexists("user", "other");Boolean other_other = jedis.hexists("other", "other");System.out.println("user_name:" + user_name);System.out.println("user_other:" + user_other);System.out.println("other_other:" + other_other);} user_name:true user_other:false other_other:false

3.當字段不存在時賦值

HSETNX key field value

HSETNX 命令與HSET 命令類似,區別在于如果字段已經存在,HSETNX命令將不執行任何操作。

127.0.0.1:6379> keys * 1) "user" 127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22" 127.0.0.1:6379> hsetnx user id 1001 //id字段存在 (integer) 0 127.0.0.1:6379> hsetnx user id 1002 //id字段存在 (integer) 0 127.0.0.1:6379> hsetnx user sex male //sex 字段不存在 (integer) 1

實踐:使用Java操作Redis數據庫:HSETNX

@Testpublic void testHSETNX() {Jedis jedis = new Jedis("127.0.0.1", 6379);Set<String> keys = jedis.keys("*");Map<String, String> user = jedis.hgetAll("user");System.out.println("所有的鍵:" + keys);System.out.println("user鍵中所有的鍵值:" + user);Long hsetnx_1 = jedis.hsetnx("user", "id", "1001");Long hsetnx_2 = jedis.hsetnx("user", "id", "1002");Long hsetnx_sex = jedis.hsetnx("user", "sex", "male");System.out.println(hsetnx_1);System.out.println(hsetnx_2);System.out.println(hsetnx_sex);} 所有的鍵:[user] user鍵中所有的鍵值:{name=breez, age=22, id=1001} 0 0 1

4.增加數字

HINCRBY key field increment

此命令的默認值為0.

127.0.0.1:6379> keys * 1) "user" 127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22" 7) "sex" 8) "male" 127.0.0.1:6379> hincrby user score 20 (integer) 20 127.0.0.1:6379> hget user score "20" 127.0.0.1:6379> hincrby user score 30 (integer) 50 127.0.0.1:6379> hget user score "50" 127.0.0.1:6379> hgetall user1) "id"2) "1001"3) "name"4) "breez"5) "age"6) "22"7) "sex"8) "male"9) "score" 10) "50"

實踐:使用Java操作Redis數據庫:HINCRBY

@Testpublic void testHINCRBY() {Jedis jedis = new Jedis("127.0.0.1", 6379);Map<String, String> user = jedis.hgetAll("user");System.out.println(user);Long score_20 = jedis.hincrBy("user", "score", 20);Long score_30 = jedis.hincrBy("user", "score", 30);System.out.println(score_20);System.out.println(score_30);System.out.println(jedis.hgetAll("user"));} {name=breez, age=22, id=1001, sex=male} 20 50 {name=breez, score=50, id=1001, age=22, sex=male}

5.刪除字段

HDEL key field [field …]

HDEL命令可以刪除一個或多個字段,返回值是被刪除字段的個數。

127.0.0.1:6379> hgetall user //獲取所有字段值1) "id"2) "1001"3) "name"4) "breez"5) "age"6) "22"7) "sex"8) "male"9) "score" 10) "50" 127.0.0.1:6379> hdel user score //刪除score字段 (integer) 1 127.0.0.1:6379> hgetall user //獲取所有的字段 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22" 7) "sex" 8) "male" 127.0.0.1:6379> hdel user age sex //同時刪除字段age、 sex (integer) 2 127.0.0.1:6379> hgetall user //獲取所有的字段 1) "id" 2) "1001" 3) "name" 4) "breez"

實踐:使用Java操作Redis數據庫:HDEL

@Testpublic void testHDEL() {Jedis jedis = new Jedis("127.0.0.1", 6379);Map<String, String> user = jedis.hgetAll("user");System.out.println(user);Long hdel = jedis.hdel("user", new String[]{"name", "age"});System.out.println(hdel);System.out.println(jedis.hgetAll("user"));} {name=breez, age=22, id=1001} 2 {id=1001}

二、命令進階

命令解釋
HKEYS key只獲取字段名
HVALS key只獲取字段值
HLEN key獲得字段數量

1.只獲取字段名或字段值

HKEYS key
HVALS key

  • HKEYS
127.0.0.1:6379> hgetall user //獲取所有的鍵值 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22" 127.0.0.1:6379> hkeys user //獲取所有的鍵 1) "id" 2) "name" 3) "age"

實踐:使用Java操作Redis數據庫:HKEYS

@Testpublic void testHKEYS() {Jedis jedis = new Jedis("127.0.0.1", 6379);System.out.println(jedis.hgetAll("user"));Set<String> user_keys = jedis.hkeys("user");System.out.println("所有的鍵:" + user_keys);} {name=breez, age=22, id=1001} 所有的鍵:[name, age, id]
  • HVALS
127.0.0.1:6379> hgetall user //獲取所有的鍵值 1) "id" 2) "1001" 3) "name" 4) "breez" 5) "age" 6) "22" 127.0.0.1:6379> hvals user //獲取所有的值 1) "1001" 2) "breez" 3) "22"

實踐:使用Java操作Redis數據庫:HVALS

@Testpublic void testHVALS() {Jedis jedis = new Jedis("127.0.0.1", 6379);System.out.println(jedis.hgetAll("user"));List<String> user_values = jedis.hvals("user");System.out.println("所有的值:" + user_values);} {name=breez, age=22, id=1001} 所有的值:[1001, breez, 22]

2. 獲得字段數量

HLEN key

127.0.0.1:6379> hkeys user 1) "id" 2) "name" 3) "age" 127.0.0.1:6379> hlen user (integer) 3

實踐:使用Java操作Redis數據庫:HLEN

@Testpublic void testHLEN() {Jedis jedis = new Jedis("127.0.0.1", 6379);Set<String> user_keys = jedis.hkeys("user");System.out.println("所有的鍵:" + user_keys);Long user_len = jedis.hlen("user");System.out.println("鍵的長度:" + user_len);} 所有的鍵:[name, age, id] 鍵的長度:3

Redis中文官方網站:http://www.redis.cn


未完待續,持續更新中...

總結

以上是生活随笔為你收集整理的Redis数据类型--散列类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。