zoukankan      html  css  js  c++  java
  • .Net Core下 Redis的String Hash List Set和Sorted Set的例子

    1.新建一个.Net Core控制台应用程序,用Nuget导入驱动

    打开程序包管理控制台,


    执行以下代码。

    PM> Install-Package ServiceStack.Redis

    即可添加Redis的引用。

    2.StringDemo

    String类型是最常用的数据类型,在Redis中以KKey/Value存储。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using ServiceStack.Redis;
    using ServiceStack.Text;
    
    namespace RedisDotNetDemo
    {
        class StringDemo
        {
            public static void Start()
            {
                var redisMangement = new RedisManagerPool("127.0.0.1:6379");
                var client = redisMangement.GetClient();
    
                client.Set<int>("pwd", 111);                       //普通字符串
                int pwd = client.Get<int>("pwd");
                Console.WriteLine(pwd);
                var todoTools = client.As<Todo>();
                Todo todo=new Todo(){Content = "123",Id =todoTools.GetNextSequence(),Order = 1};
                client.Set<Todo>("todo", todo);                    //object
                Todo getTodo = client.Get<Todo>("todo");
                Console.WriteLine(getTodo.Content);
    
                List<Todo> list=new List<Todo>(){new Todo(){Content = "123"},new Todo(){Content = "234"}};      //List<Object>
    
                client.Set("list", list);
                List<Todo> getList = client.Get<List<Todo>>("list");
    
                foreach (var VARIABLE in getList)
                {
                    Console.WriteLine(VARIABLE.Content);
                }
                Console.ReadLine();
            }
        }
        class Todo
        {
            public long Id { get; set; }
            public string Content { get; set; }
            public int Order { get; set; }
            public bool Done { get; set; }
        }
    }
    
    
    

    3.HashDemo

    如何,Hash在Redis采用 (HashId,Key,Value)进行存储

    一个HashId 可以包含多个key,一个key对应着一个value

    using System;
    using System.Collections.Generic;
    using System.Text;
    using ServiceStack.Redis;
    
    namespace RedisDotNetDemo
    {
        class HashDemo
        {
            public static void Start()
            {
                var redisMangement = new RedisManagerPool("127.0.0.1:6379");
                var client = redisMangement.GetClient();
                client.SetEntryInHash("test", "123", "aaaaa");                       //存储一次数据  test是hashid,123是key,aaaa是value
                List<string> listKeys = client.GetHashKeys("test");                  //获取test哈希下的所有key
                Console.WriteLine("keys in test");
                foreach (var VARIABLE in listKeys)
                {
                    Console.WriteLine(VARIABLE);
                }
                List<string> listValue = client.GetHashValues("test");             //获取test哈希下的所有值
                Console.WriteLine("test 里的所有值");
                foreach (var VARIABLE in listValue)
                {
                    Console.WriteLine(VARIABLE);
                }
                string value = client.GetValueFromHash("test", listKeys[0]);      //获取test哈希下,第一个Key对应的值
                Console.WriteLine("test 下的key"+listKeys[0]+"对应的值"+value);
    
            }
        }
    }
    

    4.ListDemo

    list是一个链表结构,key可以理解为链表的名字,然后往这个名字所对应的链表里加值。,list可以以队/栈的形式进行工作。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using ServiceStack.Redis;
    
    namespace RedisDotNetDemo
    {
        class ListDemo
        {   
            public static void Start()
            {
                var redisMangement = new RedisManagerPool("127.0.0.1:6379");
                var client = redisMangement.GetClient();
    
                //队列的使用   //先进先出
                client.EnqueueItemOnList("name","zhangsan");   //入列
                client.EnqueueItemOnList("name","lisi");       //入列
                long count = client.GetListCount("name");
                for (int i = 0; i < count; i++)
                {
                    Console.WriteLine(client.DequeueItemFromList("name"));   //出列
                }
    
    
                //栈的使用 //先进后出
                client.PushItemToList("name2","wangwu");          //推入
                client.PushItemToList("name2","maliu");           //推入
                long count2 = client.GetListCount("name2");
                for (int i = 0; i < count2; i++)
                {
                    Console.WriteLine(client.PopItemFromList("name2"));   //弹出
                }
            }
        }
    }
    

    5 SetDemo

    它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找,对集合我们可以取并集,交集,差集.

    using System;
    using System.Collections.Generic;
    using System.Text;
    using ServiceStack.Redis;
    
    namespace RedisDotNetDemo
    {
        class SetDemo
        {//它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找,对集合我们可以取并集,交集,差集.
            public static void Start()
            {
                var redisMangement = new RedisManagerPool("127.0.0.1:6379");
                var client = redisMangement.GetClient();
                //对Set类型进行操作
    
                client.AddItemToSet("a3", "ddd");
                client.AddItemToSet("a3", "ccc");
                client.AddItemToSet("a3", "tttt");
                client.AddItemToSet("a3", "sssh");
                client.AddItemToSet("a3", "hhhh");
    
                HashSet<string> hashSet = client.GetAllItemsFromSet("a3");
                foreach (var VARIABLE in hashSet)
                {
                    Console.WriteLine(VARIABLE);
                }
    
                //求并集
                client.AddItemToSet("a4", "hhhh");
                client.AddItemToSet("a4", "h777");
                HashSet<string> hashSetUnion = client.GetUnionFromSets(new string[] {"a3", "a4"});
                Console.WriteLine("并集");
                foreach (var VARIABLE in hashSetUnion)
                {
                    Console.WriteLine(VARIABLE);
                }
    
                //求交集
                HashSet<string> hashsetInter = client.GetIntersectFromSets(new string[] { "a3","a4" });
                Console.WriteLine("交集");
                foreach (var VARIABLE in hashsetInter)
                {
                    Console.WriteLine(VARIABLE);
                }
                //求差集
                HashSet<string> hashsetDifference = client.GetDifferencesFromSet("a3", new string[] { "a4" });
                Console.WriteLine("差集");
                foreach (var VARIABLE in hashsetDifference)
                {
                    Console.WriteLine(VARIABLE);
                }
            }
        }
    }
    

    6.SortedSetDemo

    SortedSet我只知道它相较于Set,它是有序的,而Set是无需的,而且用户还可以调整SortedSet中value的位置,至于具体怎么在.Net环境下调整,暂时没有学会,就不在此班门弄斧,给出一个SortedDemo的存和取得例子。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using ServiceStack.Redis;
    
    namespace RedisDotNetDemo
    {
        //区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。
        //当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构, 
        class SortedSetDemo
        {
            public static void Start()
            {
                var redisMangement = new RedisManagerPool("127.0.0.1:6379");
                var client = redisMangement.GetClient();
                client.AddItemToSortedSet("a5", "ffff");
                client.AddItemToSortedSet("a5", "bbbb");
                client.AddItemToSortedSet("a5", "gggg");
                client.AddItemToSortedSet("a5", "cccc");
                client.AddItemToSortedSet("a5", "waaa");
                System.Collections.Generic.List<string> list = client.GetAllItemsFromSortedSet("a5");
                foreach (string str in list)
                {
                    Console.WriteLine(str);
                }
            }
        }
    }
    

    以上是我对Redis中几种数据类型得用法得总结,如有不对得地方,欢迎大家批评指正。

    GitHub代码地址:https://github.com/liuzhenyulive/RedisDotNetDemo


  • 相关阅读:
    HTML5-MathML-基础篇
    HTML5-SVG-基础篇
    HTML5-canvas-基础篇
    HTML基础
    套接字缓存之skb_clone、pskb_copy、skb_copy
    套接字缓存之alloc_skb、dev_alloc_skb、kfree_skb、dev_kfree_skb、consume_skb
    套接字缓存之skb_put、skb_push、skb_pull、skb_reserve
    套接字缓存之sk_buff结构
    网络设备之监测连接状态
    网络设备之关闭
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/8490120.html
Copyright © 2011-2022 走看看