最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Redis学习笔记 Hash类型及C#调用的例子
时间:2022-06-25 08:06:33 编辑:袖梨 来源:一聚教程网
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
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
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
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
foreach (var a in arrReturnFromHVals)
{
arrFromHVals.Add(Encoding.UTF8.GetString(a));
}
/* 结果:
* values1
* values2
******************************************** HVals 结束 */
}