您当前的位置: 首页 >  redis

天才小熊猫oo

暂无认证

  • 0浏览

    0关注

    37博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Servers.Common中使用CSRedis测试操作Redis中的string、hash_table、list、set、zset

天才小熊猫oo 发布时间:2022-10-06 22:41:37 ,浏览量:0

        在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 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             
关注
打赏
1665545649
查看更多评论
0.0622s