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

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<string> arr = new List<string>();
                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<string> arr = new List<string>();
                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<string> arrFromHMGet = new List<string>();
                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<string> arrFromHVals = new List<string>();
                foreach (var a in arrReturnFromHVals)
                {
                    arrFromHVals.Add(Encoding.UTF8.GetString(a)); 
                }
                /* 结果:
                 * values1
                 * values2
                 ******************************************** HVals 结束 */
        }

时间: 2024-10-27 12:54:02

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

redis 学习笔记(6)-cluster集群搭建

上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞sharding,现在方便多了,直接上cluster功能就行了,而且还支持节点动态添加.HA.节点增减后缓存重新分布(resharding). 下面是参考官方教程cluster-tutorial 在mac机上搭建cluster的过程: 一.下载最新版redis 编译 目前最新版是3.0.7,下载地址:http:

Redis学习笔记~StackExchange.Redis实现分布式Session

对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现,即session存储的问题,如一个用户登陆后,把一个状态信息存储到当前WEB服务器的session里,而你请求其它页面时,很可能就被路由到另一台服务器了,这时,session也就丢了,而对于这种情况,有人把redis这个存储中间件想了起来,对它进行了封装,就有了今天基于redis的session共享机制.

目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)

在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行opencv中给的sample并稍加修改.      Camshift函数的原型为:RotatedRect CamShift(InputArray probImage, Rect& window, TermCriteria criteria).      其中probImage为输入图像直方图的反向投影

Lua学习笔记之类型与值_Lua

基础介绍 Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8种基本类型,分别是: nil(空)类型 boolean(布尔)类型 number(数字)类型 string(字符串)类型 userdata(自定义类型) function(函数)类型 thread(线程)类型 table(表)类型 以上是Lua中的8中基本类型,我们可以使用type函数,判断一个值得类型,type函数返回一个对应类型的字符串描述.例如: local iValue = 10

php redis学习笔记

1,connect 描述:实例连接到一个Redis. 参数:host: string,port: int 返回值:BOOL 成功返回:TRUE;失败返回:FALSE <?php $redis = new redis(); $result = $redis->connect('127.0.0.1', 6379); var_dump($result); //结果:bool(true) ?> 2,set 描述:设置key和value的值 参数:Key Value 返回值:BOOL 成功返回:T

redis 学习笔记(7)-cluster 客户端(jedis)代码示例

上节学习了cluster的搭建及redis-cli终端下如何操作,但是更常用的场景是在程序代码里对cluster读写,这需要redis-client对cluster模式的支持,目前spring-data-redis(1.6.4)还不支持cluster,最新的1.7.0 RC1已经有cluster的相关实现了,不过目前尚未正式发布,所以现阶段要使用redis-cluster的话,client最好还是选用原生的jedis,示例代码如下: 配置文件: <?xml version="1.0&quo

redis 学习笔记(5)-Spring与Jedis的集成

首先不得不服Spring这个宇宙无敌的开源框架,几乎整合了所有流行的其它框架,http://projects.spring.io/spring-data/从这上面看,当下流行的redis.solr.hadoop.mongoDB.couchBase... 全都收入囊中.对于redis整合而言,主要用到的是spring-data-redis 使用步骤: 一.pom添加依赖项 <dependency> <groupId>org.springframework.data</group

Redis学习笔记

1 安装 $ wget http://download.redis.io/releases/redis-3.0.7.tar.gz $ tar xzf redis-3.0.7.tar.gz $ cd redis-3.0.7 $ make 网页下载地址:http://www.redis.cn/download.html 2 启动服务端 $ src/redis-server 3 启动客户端 You can interact with Redis using the built-in client: $

redis学习笔记之常用命令(基础篇)

以下是redis命令行下的一些常用的基础命令,可以供大家参考学习: 1.[ set key value ] 存入一个key和值.如:set myname reson 2.[ get key ] 读取一个key的值. 3.[ del key ] 删除一个key. 4.[ del key1 key2 ... keyN ] 删除多个key.如:del myname1 myname2 5.[ exists key ] 判断一个key是否存在. 6.[ type key ] 查看key的类型. 7.[ r