https://www.cnblogs.com/ding2011/p/4745732.html

一::下载    windows 下的redis: https://github.com/ServiceStack/redis-windows
二:添加客户端的引用

下载连接(  https://github.com/mythz/ServiceStack.Redis)

下面该链接中的源码包或dll文件,引入到项目中,并添加如下名空间引用(仅限本文):

using ServiceStack.Common.Extensions;
using ServiceStack.Redis;
using ServiceStack.Redis.Generic;
using ServiceStack.Text;
using ServiceStack.Redis.Support;

三:对redis的基本操作

https://www.cnblogs.com/daizhj/archive/2011/02/17/1956860.html

https://www.cnblogs.com/daxnet/archive/2012/03/16/2400418.html

操作方法

     注:关于如何在windows,linux下配置redis,详见这篇文章:)

目前网上有一些链接Redis的C#客户端工具,这里介绍其中也是目前我们企业版产品中所使用的ServiceStackRedis, 链接地址:

https://github.com/mythz/ServiceStack.Redis

下面该链接中的源码包或dll文件,引入到项目中,并添加如下名空间引用(仅限本文):

using ServiceStack.Common.Extensions;
using ServiceStack.Redis;
using ServiceStack.Redis.Generic;
using ServiceStack.Text;
using ServiceStack.Redis.Support;

注:ServiceStackRedis封装了大量方法和对象,这里只摘有代表性的内容介绍,更多内容参见其官方文档。
 
    声明一个客户端对象:
    protected RedisClient Redis = new RedisClient("10.0.4.227", 6379);//redis服务IP和端口

一 .基本KEY/VALUE键值对操作:
    1. 添加/获取:

  List<string> storeMembers = new List<string>();
  storeMembers.ForEach(x => Redis.AddItemToList("additemtolist", x));

注:也可直接使用AddRangeToList方法将一组数据装入如:

Redis.AddRangeToList("addarrangetolist", storeMembers);

2. 获取数据

  var members = Redis.GetAllItemsFromList("additemtolist");
  members.ForEach(s => Response.Write("<br/>additemtolist :" + s));

3. 获取指定索引位置数据

var item = Redis.GetItemFromList("addarrangetolist", 2);

4. 移除:

  var list = Redis.Lists["addarrangetolist"];
  list.Clear();//清空
  list.Remove("two");//移除指定键值
  list.RemoveAt(2);//移除指定索引位置数据

二.存储对象:

    public class UserInfo
    {
        public long Id { set; get; }
        public string UserName { get; set; }
        public int Age { get; set; }
    }

1.通常方式(底层使用json序列化):

  Redis.Set<UserInfo>("userinfo", new UserInfo() { UserName = "李四", Age = 45 });
  UserInfo userinfo = Redis.Get<UserInfo>("userinfo");

注:当然上面方式也适合于基本类型,如:

    Redis.Set<int>("my_age", 12);//或Redis.Set("my_age", 12);
    int age = Redis.Get<int>("my_age");

2.object序列化方式存储:

  var ser = new ObjectSerializer();    //位于namespace ServiceStack.Redis.Support;
  bool result = Redis.Set<byte[]>("userinfo", ser.Serialize(new UserInfo() { UserName = "张三", Age = 12 }));
  UserInfo userinfo = ser.Deserialize(Redis.Get<byte[]>("userinfo")) as UserInfo;
  //也支持列表
  Redis.Set<byte[]>("userinfolist_serialize", ser.Serialize(userinfoList));
  List<UserInfo> userList = ser.Deserialize(Redis.Get<byte[]>("userinfolist_serialize")) as List<UserInfo>;

需要说明的是在测试过程中发现JSON序列化的效率要比object序列化高一些。
  
三.存储表格对象,比如:

  using (var redisUsers = Redis.GetTypedClient<UserInfo>())
  {
      redisUsers.Store(new UserInfo { Id = redisUsers.GetNextSequence(), UserName = "daizhj", Age = 12 });
      redisUsers.Store(new UserInfo { Id = redisUsers.GetNextSequence(), UserName = "daizhenjun", Age = 13 });

var allUsers = redisUsers.GetAll();//就像操作ado对象一样,可以进行CRUD等操作
      allUsers.ForEach(s => Response.Write("<br/>user :" + s.UserName + " age:" + s.Age));
  }

四.使用客户端链接池模式提升链接速度:

  public static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts)
  {
       //支持读写分离,均衡负载
       return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
       {
           MaxWritePoolSize = 5,//“写”链接池链接数
           MaxReadPoolSize = 5,//“写”链接池链接数
           AutoStart = true,
       });          
  }

声明链接池对象(这里只使用一个redis服务端):

  PooledRedisClientManager prcm = CreateManager(new string[] { "10.0.4.210:6379" }, new string[] { "10.0.4.210:6379" });
 
  List<UserInfo> userinfoList = new List<UserInfo>();
  userinfoList.Add(new UserInfo() { UserName = "pool_daizhj", Age = 1 });
  userinfoList.Add(new UserInfo() { UserName = "pool_daizhj1", Age = 2 });

从池中获取一个链接:

  using (IRedisClient Redis = prcm.GetClient())
  {              
       Redis.Set("userinfolist", userinfoList);
       List<UserInfo> userList = Redis.Get<List<UserInfo>>("userinfolist");
  }

注:
  1.前三种方式我在本地测试发现存取效率从高到底,具体原因还待分析。

2.如只想使用长链接而不是链接池的话,可以直接将下面对象用static方式声明即可:  
      protected static RedisClient Redis = new RedisClient("10.0.4.227", 6379);

这样在redis服务端显示只有一个客户链接

3.与memcached测试过程中发现,在存储时两者效率接近(使用本文第一种方式),在取数据时memcached速度比redis要快一些(毫秒级差异),这一点并不像网上一些文章所说的那样,看来在实际开发和生产环境下还要以使用背景及结果为准。

测试代码下载链接:

/Files/daizhj/Redis.Sample.rar

redics在windows平台下的使用的更多相关文章

  1. Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  2. windows平台下基于VisualStudio的Clang安装和配置

    LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...

  3. Windows平台下的读写锁

    Windows平台下的读写锁简单介绍Windows平台下的读写锁以及实现.背景介绍Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(Initialize ...

  4. [转]Windows平台下安装Hadoop

    1.安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件 ...

  5. MongoDB学习总结(一) —— Windows平台下安装

    > 基本概念 MongoDB是一个基于分布式文件存储的开源数据库系统,皆在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值key=>val ...

  6. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  7. Windows平台下的内存泄漏检测

    在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...

  8. 不同WINDOWS平台下磁盘逻辑扇区的直接读写

    不同WINDOWS平台下磁盘逻辑扇区的直接读写 关键字:VWIN32.中断.DeviceIoControl 一.概述 在DOS操作系统下,通过BIOS的INT13.DOS的INT25(绝对读).INT ...

  9. Spotlight on Mysql在Windows平台下的安装及使用简介

    Spotlight on Mysql在Windows平台下的安装及使用简介   by:授客 QQ:1033553122 1.   测试环境 Win7 64位 mysql-connector-odbc- ...

随机推荐

  1. Confluence 6 开始使用

    欢迎来到 Confluence 的开始使用指南文档.在这个稳定中,你将会找到有关对 Confluence 进行评估的指南和其他的一些有用的内容.当你开始使用 Confluence 的时候,这些信息能够 ...

  2. Confluence 6 色彩选择器展开的页面

    色彩选择器展开的页面中对色彩的选择配置. https://www.cwiki.us/display/CONFLUENCEWIKI/Customising+Colour+Schemes

  3. Vue.extend和Vue.component的联系与差异

    extend 是构造一个组件的语法器. 你给它参数 他给你一个组件 然后这个组件 你可以作用到Vue.component 这个全局注册方法里, 也可以在任意vue模板里使用apple组件 var ap ...

  4. ionic3 调用摄像头 当键盘弹出时候 出现摄像头 背景

    iOS 端毫无 bug,Android 端却出现了问题.当软键盘弹出后,Android 端的 tabs 移到了软键盘的上面,再仔细一看,整个界面都被压扁了,输入框也不知道去哪儿了. 于是去翻 Ioni ...

  5. mysql老是停止运行该怎么解决

    你可能还会遇到无法启动mysql的错误 解决方法如下:

  6. spring boot 解决跨域访问

    package com.newings.disaster.shelters.configuration; import org.springframework.context.annotation.B ...

  7. 【python】ftp连接,主被动,调试等级

    示例代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import os from ftplib import FTP def ftp_down( ...

  8. laravel zh-CN

    位置: 调用:

  9. linux下搭建SVN

      官网下载: http://subversion.apache.org/packages.html SVN客户端:TortoiseSVN :https://tortoisesvn.net/downl ...

  10. delete web server(nginx)

    #!/bin/bash conf_dir1="/usr/local/nginx/conf/vhost.d" #conf_dir2="/usr/local/apache2/ ...