转自  :http://blog.csdn.net/qiujialongjjj/article/details/16945569

一、初步准备

Redis 是一个开源的使用ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。
本文主要讲述的是如何使用C#语言来进行Redis分布式缓存的程序编写。首先,需要从github下载最新的32/64位安装(下载地址),解压后根据自己机器的实际情况选择32位或者64位,例如:我机器是64位win7,于是将64bit下所有文件拷贝到D盘根目录下新建文件夹redis中,如图:
 
接下来我们需要在vs中新建一个Redis的测试Demo,并为其添加Redis程序包,如图:
 
至此,Redis分布式编程的准备工作已经完成,可以得到如下示例Demo效果图:

二、Redis服务

 在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图
           
 
可以将此服务设置为windows系统服务,下载Redis服务安装软件,安装即可。
安装完成在服务中找到此服务,将其设置为自动延迟启动即可。
再回到redis文件夹下,找到redis-cli.exe文件,它就是Redis客户端程序。打开,输入:set qiujialong 123
即在Redis中插入了一条key为qiujialong,value为123的数据,继续输入:get qiujialong
得到value保存的数据123。
 
 
如果想知道Redis中一共保存了多少条数据,则可以使用:keys * 来查询:
以上即为Redis服务的安装与它的基本操作,再下一篇文章中将讲述如何使用C#来完成Redis分布式缓存的开发。
 

三、程序配置

C# Redis实战(二)中我们安装好了Redis的系统服务,此时Redis服务已经运行。
现在我们需要让我们的程序能正确读取到Redis服务地址等一系列的配置信息,首先,需要在Web.config文件中添加如下信息:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. 有关如何配置 ASP.NET 应用程序的详细信息,请访问
  4. http://go.microsoft.com/fwlink/?LinkId=169433
  5. -->
  6. <configuration>
  7. <configSections>
  8. <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  9. <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  10. <section name="RedisConfig" type="RedisDemo.RedisConfigInfo, RedisDemo"/>
  11. </configSections>
  12. <RedisConfig WriteServerList="127.0.0.1:6379" ReadServerList="127.0.0.1:6379" MaxWritePoolSize="60"
  13. MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false">
  14. </RedisConfig>
  15. <connectionStrings>
  16. <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-RedisDemo-20131125110945;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-RedisDemo-20131125110945.mdf" />
  17. </connectionStrings>
  18. </configuration>
有了以上信息还不够,还需要用C#代码来读取并且操作,获取Redis配置的程序如下:
  1. public static RedisConfigInfo GetConfig()
  2. {
  3. RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig");
  4. return section;
  5. }
  6. public static RedisConfigInfo GetConfig(string sectionName)
  7. {
  8. RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig");
  9. if (section == null)
  10. throw new ConfigurationErrorsException("Section " + sectionName + " is not found.");
  11. return section;
  12. }
Redis管理类代码:
  1. /// <summary>
  2. /// redis配置文件信息
  3. /// </summary>
  4. private static RedisConfigInfo redisConfigInfo = RedisConfigInfo.GetConfig();
  5. private static PooledRedisClientManager prcm;
  6. /// <summary>
  7. /// 静态构造方法,初始化链接池管理对象
  8. /// </summary>
  9. static RedisManager()
  10. {
  11. CreateManager();
  12. }
  13. /// <summary>
  14. /// 创建链接池管理对象
  15. /// </summary>
  16. private static void CreateManager()
  17. {
  18. string[] writeServerList = SplitString(redisConfigInfo.WriteServerList, ",");
  19. string[] readServerList = SplitString(redisConfigInfo.ReadServerList, ",");
  20. prcm = new PooledRedisClientManager(readServerList, writeServerList,
  21. new RedisClientManagerConfig
  22. {
  23. MaxWritePoolSize = redisConfigInfo.MaxWritePoolSize,
  24. MaxReadPoolSize = redisConfigInfo.MaxReadPoolSize,
  25. AutoStart = redisConfigInfo.AutoStart,
  26. });
  27. }
  28. private static string[] SplitString(string strSource, string split)
  29. {
  30. return strSource.Split(split.ToArray());
  31. }
  32. /// <summary>
  33. /// 客户端缓存操作对象
  34. /// </summary>
  35. public static IRedisClient GetClient()
  36. {
  37. if (prcm == null)
  38. CreateManager();
  39. return prcm.GetClient();
  40. }
  41. 四、写入数据

    C# Redis实战(三)中我们已经配置好了web.config程序,并且能通过C#代码来读取和管理以上配置信息。
    接下来,就可以进行Redis的数据写入了。Redis中可以用Store和StoreAll分别保存单条和多条数据,C#中具体代码如下:
     
    1、保存多条数据
    1. protected void btnOpenDB_Click(object sender, EventArgs e)
    2. {
    3. //System.Diagnostics.Process.Start("D:\\redis\\redis-server.exe");
    4. //lblShow.Text = "Redis已经打开!";
    5. using (var redisClient = RedisManager.GetClient())
    6. {
    7. var user = redisClient.GetTypedClient<User>();
    8. if (user.GetAll().Count > 0)
    9. user.DeleteAll();
    10. var qiujialong = new User
    11. {
    12. Id = user.GetNextSequence(),
    13. Name = "qiujialong",
    14. Job = new Job { Position = ".NET" }
    15. };
    16. var chenxingxing = new User
    17. {
    18. Id = user.GetNextSequence(),
    19. Name = "chenxingxing",
    20. Job = new Job { Position = ".NET" }
    21. };
    22. var luwei = new User
    23. {
    24. Id = user.GetNextSequence(),
    25. Name = "luwei",
    26. Job = new Job { Position = ".NET" }
    27. };
    28. var zhourui = new User
    29. {
    30. Id = user.GetNextSequence(),
    31. Name = "zhourui",
    32. Job = new Job { Position = "Java" }
    33. };
    34. var userToStore = new List<User> { qiujialong, chenxingxing, luwei, zhourui };
    35. user.StoreAll(userToStore);
    36. lblShow.Text = "目前共有:" + user.GetAll().Count.ToString() + "人!";
    37. }
    38. }
    2、保存单条数据
    1. protected void btnInsert_Click(object sender, EventArgs e)
    2. {
    3. if (!string.IsNullOrEmpty(txtName.Text) && !string.IsNullOrEmpty(txtPosition.Text))
    4. {
    5. using (var redisClient = RedisManager.GetClient())
    6. {
    7. var user = redisClient.GetTypedClient<User>();
    8. var newUser = new User
    9. {
    10. Id = user.GetNextSequence(),
    11. Name = txtName.Text,
    12. Job = new Job { Position = txtPosition.Text }
    13. };
    14. user.Store(newUser);
    15. if (user.GetAll().Count > 0)
    16. {
    17. var htmlStr = string.Empty;
    18. foreach (var u in user.GetAll())
    19. {
    20. htmlStr += "<li>ID=" + u.Id + "  姓名:" + u.Name + "  所在部门:" + u.Job.Position + "</li>";
    21. }
    22. lblPeople.Text = htmlStr;
    23. }
    24. lblShow.Text = "目前共有:" + user.GetAll().Count.ToString() + "人!";
    25. }
    26. }
    27. }
    效果图:

C# Redis实战的更多相关文章

  1. Redis实战阅读笔记——开始

    Redis实战这本书,看完以后最大的不是redis本身的东西,而是作者面对实际问题的分析而给出的设计方案,可以看成NoSql设计的应用.个人从这方面收获很多,至于Redis本身的东西,这个就花一两个小 ...

  2. Redis实战阅读笔记——第一章

    Redis 实战 中文版 的20-21页看的人郁闷死了,最后看英文版才明白意思,哎,我理解能力差成这样了 其中,图 1-12 有错误,草,这个是英文版的错--应该是group:programming

  3. redis实战(01)_redis安装

    早就想对redis进行实战操作了,最近看了一些视频和参考书籍,总结总结一下,redis实战内容: 实战前先对redis做一个大概的认识: 现在开始安装redis了... redis的安装下载地址 ht ...

  4. C# Redis实战(二) [转]

    二.Redis服务  在C# Redis实战(一)中我将所有文件拷贝到了D盘redis文件夹下,其中redis-server.exe即为其服务端程序,双击即开始运行,如图               ...

  5. (转)国内外三个不同领域巨头分享的Redis实战经验及使用场景

    随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...

  6. Redis实战

    大约一年多前,公司同事开始使用Redis,不清楚是配置,还是版本的问题,当时的Redis经常在使用一段时间后,连接爆满且不释放.印象中,Redis 2.4.8以下的版本由于设计上的主从库同步问题,就会 ...

  7. Redis实战之Redis + Jedis

    用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...

  8. Redis实战之征服 Redis + Jedis + Spring (一)

    Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: Redis实战 Re ...

  9. Redis实战之征服 Redis + Jedis + Spring (二)

    不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?! 或许,是我的理解不对,没有真正的理解哈希表. 相关链接: Redis实战 Redis实 ...

随机推荐

  1. android149 360 程序锁输入密码

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. c++中的强制转换static_cast、dynamic_cast、reinterpret_cast的不同用法儿

    c++中的强制转换static_cast.dynamic_cast.reinterpret_cast的不同用法儿   虽然const_cast是用来去除变量的const限定,但是static_cast ...

  3. mysql 面试

    数据库的重要性是所有技术里最核心最需要掌握的(理解原理,并且被面试时能清晰的表达出来),直接决定运维人员薪水的高低! 所有题都要给出专业的解答方案,不是很水的那种泛泛的解答. 面试题001:什么是My ...

  4. UNIX基础知识之文件和目录

    程序清单1-1 列出一个目录中的所有文件(ls命令的简要实现): [root@localhost unix_env_advance_prog]# cat prog1-.c #include " ...

  5. yum.pid 已被锁定

      刚刚打开虚拟机,然后打算安装sharutils 工具在安装sharutils 工具的时候 终端提示 “/var/run/yum.pid 已被锁定,PID 为 1610 的另一个程序正在运行.” r ...

  6. 小白日记19:kali渗透测试之选择和修改EXP

    EXP 目的:学会选择和修改网上公开的漏洞利用代码[EXP(python\perl\ruby\c\c++....)] 方法: 1.Exploit-db[kali官方维护的漏洞利用代码库] 2.Secu ...

  7. html笔记02:html,body { ……}

    html,body { margin:0px; height:100%; } html元素可告知浏览器其自身是一个 HTML 文档.body 元素定义文档的主体.它包含文档的所有内容(比如文本.图像. ...

  8. Android(java)学习笔记111:成员位置的内部类的介绍

    1.内部类的定义 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部类的成员,包括私有. ...

  9. Python Virtualenv 虚拟环境

    在python2和python3共存的机器上做开发,要想互不干扰,虚拟环境很重要. Debian7 默认是python2.7.3,装好python3.4.1后怎么建立虚拟环境呢? $ pyvenv m ...

  10. Codeforces Round #190 (Div. 2) 水果俩水题

    后天考试,今天做题,我真佩服自己... 这次又只A俩水题... orz各路神犇... 话说这次模拟题挺多... 半个多小时把前面俩水题做完,然后卡C,和往常一样,题目看懂做不出来... A: 算是模拟 ...