Redis学习笔记 Hash类型及C#调用的例子

作者:袖梨 2022-06-25

1、


hset key field value

将哈希表 key 中的域 field 的值设置为 value。

key不存在,创建。

field 不存在,创建。已存在,覆盖之。

示例:

hset hashkey1 field1 "value1"      //创建
hset hashkey1 field1 "value1-new"  //覆盖
hset hashkey1 field2 "value2"     //创建

C#:

// 方法:

public long HSet(string hashId, byte[] key, byte[] value);

//实现: 代码在 demo 的 hset_hget_hgetall_hdel_hexists_hlen() 中

using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))  //DB=2   即:select 2
            {
               string key = "keyhashhset_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("value1_C#"));
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field2_C#"), Encoding.UTF8.GetBytes("value2_C#"));
                /*
                     hgetall keyhashhset_C#
                *  field1_C#  域
                 *  value1_C#  值
                 *  field2_C#
                 *  value2_C#
                 */
}


hget key field

返回哈希表key中给定域 field 的值。

 

示例:

hset hashkey2 field1 "test hget"  //创建个key
hget hashkey2 field1  //返回"test hget"

C#:

// 方法:

public byte[] HGet(string hashId, byte[] key);


//实现: 代码在 demo 的 hset_hget_hgetall_hdel_hexists_hlen() 中


11
 using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))  //DB=2   即:select 2
 {
 key = "keyhashhget_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("test hget 中华")); //创建个key-field
                byte[] hgetstr = redisClient.HGet(key, Encoding.UTF8.GetBytes("field1_C#")); //获取到值
                string returnstr = Encoding.UTF8.GetString(hgetstr); //转化成字符串
                /*
                   test hget 中华
                 *********************************************HGet结束*/
 }


3、

hgetall key

返回哈希表 key 中,所有域的值。

示例:


hset hashkey3 field1 values1
hset hashkey3 field2 values2
hset hashkey3 field3 values3
hset hashkey3 field4 values4   //创建key
1
hgetall hashkey3  //返回key=hashkey3 下域的值。

 

C#:

// 方法:

public byte[][] HGetAll(string hashId);
//实现:

代码在 demo 的 hset_hget_hgetall_hdel_hexists_hlen() 中

 using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))  //DB=2   即:select 2
 {
 key = "keyhashhgetall_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("test hgetall 中华1")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field2_C#"), Encoding.UTF8.GetBytes("test hgetall 中华2")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field3_C#"), Encoding.UTF8.GetBytes("test hgetall 中华3")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field4_C#"), Encoding.UTF8.GetBytes("test hgetall 中华4")); //创建个key-field
                byte[][] arrReturn= redisClient.HGetAll(key); //得到的结果
                List arr = new List();
                foreach (var a in arrReturn)
                {
                    arr.Add(Encoding.UTF8.GetString(a));
                }
                /*
                 * field1_C#
                 * test hgetall 中华1
                 * field2_C#
                 * test hgetall 中华2
                 * field3_C#
                 * test hgetall 中华3
                 * field4_C#
                 * test hgetall 中华4
                 ********************************************* HGetAll结束 */
}


4、

hdel key field [field ...]

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。


示例:

hset hashkey4 field1 values1
hset hashkey4 field2 values2
hset hashkey4 field3 values3
hset hashkey4 field4 values4
hset hashkey4 field5 values5
hset hashkey4 field6 values6   //创建key
hgetall hashkey4  //返回key=hashkey4 下域的值。
hdel hashkey4 field2  //删除单个域
hdel hashkey4 field4 field5 //删除多个域
hgetall hashkey4  // field1=values1  field3=values3 field6=values6


如图:4-1-4

IT分享4-1-4.png

 

C#:

// 方法:

public long HDel(string hashId, byte[] key);   //删除单一域
public long HDel(string hashId, byte[][] keys);//删除多个域
//实现:

代码在 demo 的 hset_hget_hgetall_hdel_hexists_hlen() 中


using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))  //DB=2   即:select 2
 {
                key = "keyhashhdel_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("test hgetall 中华1")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field2_C#"), Encoding.UTF8.GetBytes("test hgetall 中华2")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field3_C#"), Encoding.UTF8.GetBytes("test hgetall 中华3")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field4_C#"), Encoding.UTF8.GetBytes("test hgetall 中华4")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field5_C#"), Encoding.UTF8.GetBytes("test hgetall 中华5")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field6_C#"), Encoding.UTF8.GetBytes("test hgetall 中华6")); //创建个key-field
                redisClient.HDel(key, Encoding.UTF8.GetBytes("field2_C#"));  //删除一个域
                redisClient.HDel(key, new byte[][] { Encoding.UTF8.GetBytes("field4_C#"), Encoding.UTF8.GetBytes("field5_C#") });//删除多个域
                /*
                 * field1_C#
                 * test hgetall 中华1
                 * field3_C#
                 * test hgetall 中华3
                 * field6_C#
                 * test hgetall 中华6
                 **************************************************** HDel 结束 */
}


5、

hexists key field
key中 域field 是否存在。 存在返回 1,不存在返回 0。

示例:

hexists hashkey5 field1    //返回0
hset hashkey5 field1 "values1"   //创建key-field
hexists hashkey5 field1    //返回1

C#:

// 方法:

public long HExists(string hashId, byte[] key);
//实现:

代码在 demo 的 hset_hget_hgetall_hdel_hexists_hlen() 中


using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))  //DB=2   即:select 2
{
key = "keyhashhexists_C#";
            if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
            var v = redisClient.HExists(key, Encoding.UTF8.GetBytes("field1_C#")); //0 -未查询到结果
            var v2 = redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("values1_C#"));  //创建一个key-field
            var v3 = redisClient.HExists(key, Encoding.UTF8.GetBytes("field1_C#"));  //1 -查询到一个结果
}

6、


hlen key

key 中域的数量。

示例:

hset keyhashhlen field1 values1
hset keyhashhlen field2 values2
hset keyhashhlen field3 values3
hlen keyhashhlen   //3

C#:

// 方法:

 public long HLen(string hashId);
//实现:

代码在 demo 的 hset_hget_hgetall_hdel_hexists_hlen() 中


using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))  //DB=2   即:select 2
{
 key = "keyhashhlen_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("values1")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field2_C#"), Encoding.UTF8.GetBytes("values2")); //创建个key-field
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field3_C#"), Encoding.UTF8.GetBytes("values3")); //创建个key-field
                var length = redisClient.HLen(key);  //3个
}


7、

hincrby key field increment
    为哈希表key中的域 field 的值加上增量 increment(也可以为负数)
    如果key 不存在,创建之,然后再做增量。
    如果 field 不存在,赋值为0,做增量。

示例:

hincrby hashkey7 field1 100  //100


C#:

// 方法:

public long HIncrby(string hashId, byte[] key, int incrementBy);

public long HIncrby(string hashId, byte[] key, long incrementBy);
//实现:

代码在 demo 的 hincrby_hincrbyfloat_hkeys_hmget_hmset_hsetnx_hvals() 方法中
   
using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))
        {
                string key = "keyhashhincrby_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HIncrby(key, Encoding.UTF8.GetBytes("field1_C#"), 100);
                var ss = Encoding.UTF8.GetString(redisClient.HGet(key, Encoding.UTF8.GetBytes("field1_C#")));
        }
   
8、

hincrbyfloat key field increment

为哈希表 key 中的域 field 加上浮点数增量 increment ,同 hincrby 命令。

9、

hkeys key

返回哈希表key 中的所有域名。
示例:

hset hashkey9 field1 "values1"
hset hashkey9 field2 "values2"
hkeys hashkey9   //field1   field2
C#:
// 方法:

public byte[][] HKeys(string hashId);
    
//实现:

代码在 demo 的 hincrby_hincrbyfloat_hkeys_hmget_hmset_hsetnx_hvals() 方法中

using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))
        {
                key = "keyhashhkeys_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field1_C#"), Encoding.UTF8.GetBytes("values1"));
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field2_C#"), Encoding.UTF8.GetBytes("values2"));
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field3_C#"), Encoding.UTF8.GetBytes("values3"));
                redisClient.HSet(key, Encoding.UTF8.GetBytes("field4_C#"), Encoding.UTF8.GetBytes("values4"));
                byte[][] arrReturn = redisClient.HKeys(key); // 获得
                List arr = new List();
                foreach (var a in arrReturn)
                {
                    arr.Add(Encoding.UTF8.GetString(a));
                }
                /*结果:
                 * field1_C#
                 * field2_C#
                 * field3_C#
                 * field4_C#
                 **************************HKeys 结束*/
}


10、

hmget    key field [field ...]

返回哈希表key 中,一个或多个给定域的值

hmset key field value [field value ...]
    同时将多个 field-value (域-值)对设置到哈希表 key 中。
    此命令会覆盖哈希表中已存在的域。
    如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。   
   
示例:

hmset hashkey10 dog "doudou" cat "nounou" //一次设置多个域值
hmget hashkey10 dog cat nofield    //doudou nounou (nil)

C#:
// 方法:

public void HMSet(string hashId, byte[][] keys, byte[][] values);
public byte[][] HMGet(string hashId, params byte[][] keys);

//实现:
代码在 demo 的 hincrby_hincrbyfloat_hkeys_hmget_hmset_hsetnx_hvals() 方法中

 using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))
        {
             key = "keyhashhmget_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                var arr_fields = new byte[][] {
                   Encoding.UTF8.GetBytes("field1_C#"),
                   Encoding.UTF8.GetBytes("field2_C#"),
                   Encoding.UTF8.GetBytes("field3_C#"),
                   Encoding.UTF8.GetBytes("field4_C#"),
                   Encoding.UTF8.GetBytes("field5_C#")
                };
                var arr_values = new byte[][] {
                   Encoding.UTF8.GetBytes("values1"),
                   Encoding.UTF8.GetBytes("values2"),
                   Encoding.UTF8.GetBytes("values3"),
                   Encoding.UTF8.GetBytes("values4"),
                   Encoding.UTF8.GetBytes("values5")
                };
                redisClient.HMSet(key, arr_fields, arr_values);   //HMSet 操作,设置多个 fields
                var arr_getfields = new byte[][] {
                   Encoding.UTF8.GetBytes("field2_C#"),
                   Encoding.UTF8.GetBytes("field3_C#")
                };
                byte[][] arrReturnFromHMGet = redisClient.HMGet(key,arr_getfields); //HMGet 获取多个fields
                List arrFromHMGet = new List();
                foreach (var a in arrReturnFromHMGet)
                {
                    arrFromHMGet.Add(Encoding.UTF8.GetString(a));
                }
                /*结果:
                 * values2
                 * values2
                 ********************************************HMSet  HMGet 结束*/
        }
   
11、

hsetnx key field value
    将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
    若域 field 已经存在,该操作无效。
示例:

hsetnx hashkey11 field1 values1  //创建key-field,并赋值。
hsetnx hashkey11 field1 valuesedit  //已存在key-field,操作无效。
   
C#:
// 方法:

public long HSetNX(string hashId, byte[] key, byte[] value);
//实现:

代码在 demo 的 hincrby_hincrbyfloat_hkeys_hmget_hmset_hsetnx_hvals() 方法中

using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))
        {
                key = "keyhashhsetnx_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                redisClient.HSetNX(key, Encoding.UTF8.GetBytes("notexistfields"), Encoding.UTF8.GetBytes("msetnx values")); //没有域notexistfields,创建并赋值
                redisClient.HSetNX(key, Encoding.UTF8.GetBytes("notexistfields"), Encoding.UTF8.GetBytes("msetnx values2")); //不执行。 因为域已经存在,不操作。
                var returnstr = Encoding.UTF8.GetString(redisClient.HGet(key, Encoding.UTF8.GetBytes("notexistfields"))); //msetnx values
                /*结果:
                 *  msetnx values
                 *********************************** HSetNX 结束 */
        }


12、

hvals keys
    返回哈希表key中所有域的值。
   
示例:


hmset hashkey12 field1 values1 field2 values2
hvals hashkey12  //结果:field1 field2


C#:
// 方法:

public long HSetNX(string hashId, byte[] key, byte[] value);
//实现:

代码在 demo 的 hincrby_hincrbyfloat_hkeys_hmget_hmset_hsetnx_hvals() 方法中

using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379, null, 2))
        {
              key = "keyhashhvals_C#";
                if (redisClient.ContainsKey(key)) redisClient.Del(key); //先删掉这个key
                var arr_fields_hvals = new byte[][] {
                   Encoding.UTF8.GetBytes("field1_C#"),
                   Encoding.UTF8.GetBytes("field2_C#")
                };
                var arr_values_hvals = new byte[][] {
                   Encoding.UTF8.GetBytes("values1"),
                   Encoding.UTF8.GetBytes("values2")
                };
                redisClient.HMSet(key, arr_fields_hvals, arr_values_hvals);   //HMSet 操作,设置多个 fields
                byte[][] arrReturnFromHVals = redisClient.HVals(key); //HMGet 获取多个fields
                List arrFromHVals = new List();
                foreach (var a in arrReturnFromHVals)
                {
                    arrFromHVals.Add(Encoding.UTF8.GetString(a)); 
                }
                /* 结果:
                 * values1
                 * values2
                 ******************************************** HVals 结束 */
        }

相关文章

精彩推荐