zoukankan      html  css  js  c++  java
  • Redis在.net中的应用学习

    在Redis的官网(http://redis.io/clients#c)上可以看到支持Redis C#的客户端。

    redis的网络连接方式和传统的rdbms相似,一种是长连接,一种是连接池,此处使用长连接进行连接。

    目前redis官方版本不支持.net直接进行连接,需要使用一些开源类库。目前最流行的就是ServiceStack.redis,可以通过https://github.com/ServiceStack/ServiceStack.Redis下载最新版本。

    下载完成解压,在ServiceStack.Redis-masteruild eleaseMonoDevelop目录下看到ServiceStack.Redis.zip文件,这个就是需要引入到.net项目中的4个dll文件。

    测试时发现四个文件版本比较旧,可以通过编译redis源码,生成最新的dll文件。

    打开VS2013,创建一个控制台应用程序,写了一些简单的Redis操作

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 using ServiceStack.Redis;
     8 using ServiceStack.Redis.Support;
     9 
    10 namespace RedisDemo
    11 {
    12     class Program
    13     {
    14         private static RedisClient redis = new RedisClient("192.168.32.216", 6379, "anny");
    15         static void Main(string[] args)
    16         {
    17             //单个字符串写入
    18             redis.SetValue("age", "20");
    19             //读取指定key的字符串
    20             redis.GetValue("age");
    21 
    22             //存储数字
    23             redis.Set<int>("int_age", 30);
    24             int age = redis.Get<int>("int_age");
    25             Console.WriteLine("int_age={0}", age);
    26     
    27             //将字符串列表写入Redis List
    28             List<string> colourList = new List<string>{"red","pink","green","blue","black","white"};
    29             colourList.ForEach(item => redis.AddItemToList("colourList", item));
    30 
    31             //读取Redis List内容
    32             List<string> colourList1 = redis.GetAllItemsFromList("colourList");
    33             colourList1.ForEach(item => Console.Write(item + " "));
    34 
    35             //存储实体对象,在Redis中以json格式存储
    36             UserInfo user = new UserInfo(){Id=1, Name="Mark", Age=32, City="ShangHai" };
    37             redis.Set<UserInfo>("user_1", user);
    38             UserInfo user1 = redis.Get<UserInfo>("user_1");
    39             Console.WriteLine("id={0},name={1},age={2},city={3}", user1.Id, user1.Name, user1.Age, user1.City);
    40 
    41             //object序列化方式
    42             var ser = new ObjectSerializer();
    43             redis.Set<byte[]>("user1", ser.Serialize(user));
    44             UserInfo user11 = ser.Deserialize(redis.Get<byte[]>("user1")) as UserInfo;
    45             Console.WriteLine("id={0},name={1},age={2},city={3}", user1.Id, user1.Name, user1.Age, user1.City);
    46 
    47             //存储对象列表到redis中
    48             List<UserInfo> userList = new List<UserInfo>{
    49                 new UserInfo{Id=2, Name="Jack", Age=27, City="beijing" },
    50                 new UserInfo{Id=3, Name="Tom", Age=25, City="XiaMen" }
    51             };
    52 
    53             redis.Set<byte[]>("userlist", ser.Serialize(userList));
    54             List<UserInfo> userList1 = ser.Deserialize(redis.Get<byte[]>("userlist")) as List<UserInfo>;
    55             userList1.ForEach(i =>
    56             {
    57                 Console.WriteLine("id={0},name={1},age={2},city={3}", i.Id, i.Name, i.Age, i.City);
    58             });
    59 
    60             
    61             Console.Read();
    62         }
    63 
    64         [Serializable]
    65         class UserInfo
    66         {
    67             public int Id { get; set; }
    68             public string Name { get; set; }
    69             public int Age { get; set; }
    70 
    71             public string City { get; set; }
    72         }
    73     }
    74 }

     

    Redis linux环境下查看:

    root@ubuntu:/usr/local/redis/bin# ./redis-cli -a anny
    127.0.0.1:6379> keys *
    1) "age"
    2) "colourList"
    3) "int_age"
    4) "user1"
    5) "userlist"
    6) "user_1"
    127.0.0.1:6379> type colourList
    list
    127.0.0.1:6379> lrange colourList 0 -1
    1) "red"
    2) "pink"
    3) "green"
    4) "blue"
    5) "black"
    6) "white"
    127.0.0.1:6379> type userlist
    string
    127.0.0.1:6379> get userlist
    "x00x01x00x00x00xffxffxffxffx01x00x00x00x00x00x00x00x0cx02x00x00x00@RedisDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullx04x01x00x00x00x81x01System.Collections.Generic.List`1[[RedisDemo.Program+UserInfo, RedisDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]x03x00x00x00x06_itemsx05_size_versionx04x00x00x1cRedisDemo.Program+UserInfo[]x02x00x00x00 x03x00x00x00x02x00x00x00x02x00x00x00ax03x00x00x00x00x01x00x00x00x04x00x00x00x04x1aRedisDemo.Program+UserInfox02x00x00x00 x04x00x00x00 x05x00x00x00 x02x05x04x00x00x00x1aRedisDemo.Program+UserInfox04x00x00x00x13<Id>k__BackingFieldx15<Name>k__BackingFieldx14<Age>k__BackingFieldx15<City>k__BackingFieldx00x01x00x01x02x00x00x00x02x00x00x00x06x06x00x00x00x04Jackx1bx00x00x00x06ax00x00x00abeijingx01x05x00x00x00x04x00x00x00x03x00x00x00x06x00x00x00x03Tomx19x00x00x00x06 x00x00x00x06XiaMenx0b"

    127.0.0.1:6379> type user_1
    string
    127.0.0.1:6379> get user_1
    "{"Id":1,"Name":"Mark","Age":32,"City":"ShangHai"}"

  • 相关阅读:
    点对点风格软件架构模式
    《XXX重大技术需求征集系统》的可用性和可修改性战术分析
    淘宝网应用场景分析
    《架构漫谈》读后感
    《软件需求模式》阅读笔记06
    hdfs会出现的一些问题
    经常使用的架构模式之一——客户端-服务器模式
    阅读《大型网站技术架构》
    以《淘宝网》为例分析质量属性
    架构漫谈读后感
  • 原文地址:https://www.cnblogs.com/anny-1980/p/4586717.html
Copyright © 2011-2022 走看看