分布式服务器框架之Servers.Common中使用CSRedis测试操作Redis中的string、hash_table、list、set、zset

        在Servers.Common类库总创建了一个TestRedis.cs文件,我是在Servers.GameServer中去初始化的。主要是测试了Redis中常用的数据类型和常用的API,有一些不常用的可能没有写。需要详细了解API的话可以安装上CSRedis之后F12追进去查看,上面有详细的API说明。

String类型

往redis里面写一个key为TestKey,value为111的键值对

private void TestAdd()
{
     RedisHelper.Set("TestKey", 111);
}

HashTable类型

hash table类型准确的来说是个二维的键值对结构key:{key:value},外层的key是一个hash table 的名字,里面的key才是真正的key,其实不光是hashTable,后面的集合set、list也是这样的结构只不过是少了一个key对应的value类似这样 key:{value1,value2,value3}

先写一个key作为Hash Table的名字

string key = "AccountHash";

往Hash Table里面添加元素(hash table 的操作都是以H开头)

RedisHelper.HSet(key, "1", "account1");
RedisHelper.HSet(key, "2", "account2");
RedisHelper.HSet(key, "3", "account3");
RedisHelper.HSet(key, "999", "account999");

通过key和filedKey获取到value

string value = RedisHelper.HGet(key, "1");

通过缓存壳获取(如果没有这个key和fieldKey对应的value,则会创建value,只不过需要注意的是如果通过这个函数创建的value会有一层外壳,会记录真实的value和创建时间,在实际开发中不可以混用,否则会出问题)=GetOrAdd

string value = RedisHelper.CacheShell(key, "4", -1, () => { return "account4"; });

根绝key和filedKey删除value

RedisHelper.HDel(key,"4");

通过key获取到hash table内的所有内容

//get all item
 RedisScan<(string field, string value)> m_pair = RedisHelper.HScan(key, 0);
(string field, string value) item;
(string field, string value)[] items = m_pair.Items;
for (int i = 0; i < items.Length; ++i)
{
    item = items[i];
    Console.WriteLine("for:{0} filed{1} value{2}", i, item.field, item.value);
}

根绝key获取到hash table的长度

RedisHelper.HLen(key)

List类型

需要定义一个List的key和上面的hash table 要取一个合理的名字,操作list的大部分API都是以L开头。

List添加元素(如果list已经存在,会往该list的尾部插入元素)

RedisHelper.RPush(key, "角色1", "角色2", "角色3");

根据Index获取List中的value (如果没有该index返回空字符换)

 RedisHelper.LIndex(key, 10)

获取范围内的value(如果写的范围超出了,会返回所有的元素,不会报错)

string[] arrValue = RedisHelper.LRange(key, 0, 3);
for (int i = 0; i < arrValue.Length; ++i)
{
     Console.WriteLine(" i:{0} value:{1}", i, arrValue[i]);
}

在某个元素之前插入元素

RedisHelper.LInsertBefore(key, "角色1", "Before角色1");

在某个元素之后插入元素

RedisHelper.LInsertAfter(key, "角色3", "After角色3");

从尾巴弹出value(redis中的list其实更像一个和栈的混合体)

RedisHelper.RPop(key)

从头部弹出value(感觉同上)

RedisHelper.LPop(key)

设置Value(其实这个API更应该叫Repleace,如果该index没有元素,redis会抛出异常)

RedisHelper.LSet(key,3, "角色11");

Set类型

set类型也叫集合类型,存的时候会计算这个key的hash值,一个key只允许存在一次。操作Set的API大多是以S开头。 还是像上面一样需要设置一个Set的名字作为Key去操作这个Set。

添加操作  (会返回成功添加的数量,会自动去重)

RedisHelper.SAdd(key, "账号1", "账号2", "账号3", "账号3", "账号4", "账号5", "账号5");

检查Set中的key是否存在

RedisHelper.SIsMember(key, "账号11")

检查Set中的数量(这个名字很有意思叫Card)

RedisHelper.SCard(key)

移除并返回集合中的一个或多个随机元素(其实这个功能比较诡异,想不通哪里会用到会弹出随机数量的功能)

//随机弹出一个
RedisHelper.SPop(key, 1)

删除

RedisHelper.SRem(key, "账号1");

获得集合的数组(和redis里的顺序不一样)

string[] arrMembers = RedisHelper.SMembers(key);
for (int i = 0; i < arrMembers.Length; ++i)
{
   Console.WriteLine("i:{0} value:{1}", i, arrMembers[i]);
}

ZSet类型

ZSet也叫ZOrderSet或者是自动排序集合,可以根据用户指定的规则在Redis内部进行自动排序。无需用户操心排序的问题,只管插入就行。下文说的key其实=value,其实感觉用value不太合适,这个感觉像是第二个维度的key,score更像是value。操作ZSet的API大都是以Z开头。

添加数据(如果有相同的key的话,会用后插入的覆盖先插入的数据)


for (int i = 1; i <= 30; ++i)
{
   int iRoleId = 1000 + i;
   double score = new Random().Next(1, 1000);
   RedisHelper.ZAdd(key, ((decimal, object))(score, iRoleId));
   Console.WriteLine("ZAdd key:{0} roleId:{1} score:{2}", key, iRoleId, score);
}

获取到指定排名的key(我是获取到前20的key)

string[] szZRange = RedisHelper.ZRange(key,0,20);
for (int i = 0; i < szZRange.Length; ++i)
{
   Console.WriteLine("ZRange i:{0} value:{1}",i,szZRange[i]);
}

获取到排名前20的数据(最常用排序,包括score和key)

(string value, decimal score) tpKv;
(string value,decimal score)[] tpszKv= RedisHelper.ZRangeWithScores(key, 0, 20);
for (int i = 0; i < tpszKv.Length; ++i)
{
   tpKv = tpszKv[i];
   Console.WriteLine("ZRange i:{0} value:{1} score:{2}", i, tpKv.value, tpKv.score);
}

总数量

long count = RedisHelper.ZCard(key);

根据Score范围找到key数组

string[] szRoleId = RedisHelper.ZRangeByScore(key,100,200);
for (int i = 0; i < szRoleId.Length; ++i)
{
     Console.WriteLine(" ZRangeByScore i:{0} key:{1}",i, szRoleId[i]);
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值