redis接济各样差异方法的排序,事务中的所有命令都会系列化、按梯次的举行

Redis安装与开行

redis简介

Redis是一个开源的应用ANSI
C语言编写、匡助网络、可按照内存亦可持久化的日志型、Key-Value数据库,和Memcached类似,它协助存储的value类型相对越多,包罗string(字符串)、list(链表)、set(集合)、zset(sorted
set
–有序聚集)和hash(哈希类型)。这几个数据类型都辅助push/pop、add/remove及取交集并集和差集及更增加的操作,而且这一个操作都是原子性的。在此基础上,redis扶助各类分歧措施的排序。与memcached一样,为了确保功用,数据都是缓存在内存中。区其他是redis会周期性的把创新的数码写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上落成了master-slave(主从)同步。

Redis是一个高性能的key-value数据库。
redis的产出,很大程度补偿了memcached这类key/value存储的供不应求,在部
分场所可以对关周密据库起到很好的增补成效。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很有益于。

Redis协理中央同步。数据足以从主服务器向自由数量的从服务器上同台,从服务器可以是关联其他从服务器的主服务器。那使得Redis可进行单层树复制。存盘可以顺便的对数据开展写操作。由于完全落成了宣布/订阅机制,使得从数据库在此外地方共同树时,可订阅一个频道并接收主服务器完整的音讯揭橥记录。同步对读取操作的可扩充性和数目冗余很有援助。

Redis是一种尖端的key:value存储系统,其中value扶助五种数据类型:
1.字符串(strings) 2.字符串列表(lists) 3.字符串集合(sets)
4.有序字符串集合(sorted sets) 5.哈希(hashes)

现阶段在使用的档次有虎扑新浪、Github、StackOverflow
等大型应用中都用其作为缓存,Redis的官网为http://redis.io/

1. 下载Redis

Redis本身没有提供Windows版本的,并且在Windows上也不太平静,一般都将其安排到Linux环境下,Redis可以在其官网上下载, MSOpenTech中提供了Windows版本,那里为了求学安装这一版本。

图片 1

点击跳转到Github后,直接点击Zip下载。下载后依据自己电脑的本子选择32位依然64位展开安装。我将64位的解压后放到D:\Redis文件夹下,同时将文件夹内的redis.conf也拷贝到该目录下,这么些是redis的布局新闻:

图片 2

windows下搭建redis环境

  • 下载redis对应的windows版本

Redis本身并未提供Windows版本的,并且在Windows上也不太稳定,一般都将其布局到Linux环境下,Redis可以在其官网上下载MSOpenTech中提供了Windows版本;也得以直接百度搜;(附件已包括安装版本和直接操作版本)

Win版服务端下载地址:https://github.com/ServiceStack/redis-windows

  • 安装redis

安装程序可以一贯默许安装,注意端口设置就行;
如若是下载的ZIP文件,解压后得以存放到某个路径下(比如我D:\Program
Files\Redis)

  • 启用redis

启用redis须要采用命令,首先定位到redis路径,按住Shift+右键,点击在此处用命令打开:

D:\Program Files\Redis>redis-server.exe redis.windows.conf

设若redis.windows.conf那个布局文件中的bind与port的IP和端口已经被占用,则会提醒如下音讯:

图片 3

此时首先查询该端口的 pid,使用命令 【netstat -ano | findstr 6379】

图片 4

依照pid查看该详细的进度名称,使用命令【tasklist | findstr 10628】

图片 5

其一时候可以强制删除本程序及其子进度,使用命令 【taskkill -f -t -im
redis-server.exe】,也足以修改redis.windows.conf文件中port端口号,都OK

图片 6

那些时候redis启动成功了,可是并非关掉本窗口,保持端口不是关门;当然也可以在windows服务上校redis服务设置为随系统启动。那样就不要开着那多少个命令窗口了。

图片 7

 

windows下不难利用redis

再次定位到redis路径,按住Shift+右键,点击在那里用命令打开:

图片 8😉

D:\Program Files\Redis>redis-cli.exe -h 127.0.0.1 -p 6379

然后就可以执行set 给key为city赋值:

127.0.0.1:6379> set city Shanghai

通过get可以获取指定key为city的值了。

172.16.147.121:6379> get city

图片 9😉

图片 10

.NET下不难利用redis

  • 下载ServiceStack.Redis

和MongoDB一样,在.NET中利用Redis其实也是应用第三方驱动,官网推荐的是采纳ServiceStack.Redis
(可看附件)。

ServiceStack.Redis看似早就初阶收费,现在可以应用StackExchange.Redis

  • 使用ServiceStack.Redis

第一解压瑟维斯Stack.Redis并找到以下多少个DLL
图片 11

然后添加到项目引用,就可以开头简单利用redis了;

图片 12😉

private void button1_Click(object sender, EventArgs e)

        {

            RedisClient redisClient = new RedisClient("127.0.0.1", 6379);

            this.label1.Text = "获取姓名";

            this.textBox1.Text = redisClient.Get<string>("city");

            this.label2.Text = "获取年龄";

            this.textBox2.Text = redisClient.Get<string>("age");

            this.label3.Text = "获取性别";

            this.textBox3.Text = redisClient.Get<string>("sex");

        } 

图片 13😉

2. 启动Redis

在Windows上面启用Redis和起步MogoDB一样,必要动用命令行启动,首先定位到该目录,运行如下命令:

D:\Redis>redis-server.exe redis.conf

图片 14

因为是在本机运行的,那里要留意端口号,同时要有限辅助端口不要关闭。

本来你也可以将Redis作为Windows服务在后台向来打开。

下载ServiceStack.Redis

和MongoDB一样,在.NET中动用Redis其实也是利用第三方驱动,官网推荐的是行使ServiceStack.Redis 下载后解压得到如下dll

图片 15

.NET项目中行使Redis

新建一个Console程序,引用上一步骤解压的七个dll。

做一个简约的例证,在.NET中取得之前大家设置的city的值。

class Program
{
    static RedisClient redisClient = new RedisClient("172.16.147.121", 6379);//redis服务IP和端口
    static void Main(string[] args)
    {
        Console.WriteLine(redisClient.Get<string>("city"));
        Console.ReadKey();
    }
}

第一通过 static RedisClient redisClient = new
RedisClient(“172.16.147.121”, 6379);

树立连接 ,然后就可以直接用redisClient里面的Get方法赢得
key为city的值了。

图片 16

在头里的授命行中,大家网city中存入了Shanghai,现在大家取获得了那一个值。

ServerStack中有众多措施可以在.NET中调用,其类组织图如下:

图片 17

3. 使用

前天再开一个控制台应用程序连接此前启动的Redis,如下:

D:\Redis>redis-cli.exe -h 172.16.147.121 -p 6379

中间 –h后边是本机的ip地址,后边的是端口。

下一场就可以推行set 给key为city赋值:

redis 172.16.147.121:6379> set city Shanghai

因而get能够拿走指定key为city的值了。

redis 172.16.147.121:6379> get city

图片 18

同时,在我们往redis上写多少的时候,Redis服务也会定时的往文件中写多少

图片 19

那边仅简单的牵线了get和set命令,更加多命令可以查阅 http://redis.io/commands

Redis订阅和发布格局和Redis事务

——————-Redis事务——————-

1、概念:

   
redis中的事务是一组命令的集纳。事务同命令一样都是redis的蝇头执行单位,一个作业中的命令要么都履行,要么都不举办。

 

2、事务的三种属性

   
1、事务是一个单身的割裂操作:事务中的所有命令都会序列化、按顺序的实施。事务在实践的进程中,不会被其他客户端发送过来的下令请求所打断。

    2、redis事务是原子。原子意味着要么所有的授命都实施,要么都不进行。

4.

String能够包蕴其余数据,比如jpg图片或者系列化的目的;string类型是Redis最基本的数据类型,一个键最大能积存512MB

Hashes
是一个string类型的field和value的映射表,hash越发适合用于存储对象

 List列表类型可以积存一个衣冠优孟的字符串列表,常用的操作时向列表两端添台币素,或者取得列表的某一个有些;列表类型内部是运用双向链表(double
linked
list)落成的,所以向列表两端添新币素的时光复杂度为O(I),获取越接近两端的元素,速度就越快。

列表具有有序性,集合具有唯一性。

集合Set:多少个集合类型键之间仍可以够开展并集、交集、差集运算。

有序聚集Sort-Set…

 

3.

Redis是一个用的可比宽泛的Key/Value的内存数据库,新浪微博、Github、StackOverflow 等大型应用中都用其看做
高速缓存。

Redis本身没有提供Windows版本的,并且在Windows上也不太平静,一般都将其安顿到Linux环境下,Redis可以在其官网上下载

Beetle.Redis就算不够完整,可是自己说几个优点:
1、底层极度稳定,大致从不性能损耗。
2、连接数格外平稳,我用了整个一个月(经过了双十一的考验),一点问题都没有。
3、代码量很小,唯有十多少个类,完全开源。

 

2.

 

RedisHelper帮助类

图片 20图片 21

public class RedisManager
 {
  private static PooledRedisClientManager prcm;
  /// <summary>
  /// 创建链接池管理对象
  /// </summary>
  private static void CreateManager()
  {
   string[] writeServerList = SplitString(RedisConfigInfo.WriteServerList, ",");
   string[] readServerList = SplitString(RedisConfigInfo.ReadServerList, ",");
   prcm = new PooledRedisClientManager(readServerList, writeServerList,
        new RedisClientManagerConfig
        {
         MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
         MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
         AutoStart = RedisConfigInfo.AutoStart,
        });
  }
  private static string[] SplitString(string strSource, string split)
  {
   return strSource.Split(split.ToArray());
  }
  /// <summary>
  /// 客户端缓存操作对象
  /// </summary>
  public static IRedisClient GetClient()
  {
   if (prcm == null)
    CreateManager();
   return prcm.GetClient();
  }
  /// <summary>
  /// 缓存默认24小时过期
  /// </summary>
  public static TimeSpan expiresIn = TimeSpan.FromHours(24);
  /// <summary>
  /// 设置一个键值对,默认24小时过期
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key"></param>
  /// <param name="value"></param>
  /// <param name="redisClient"></param>
  /// <returns></returns>
  public static bool Set<T>(string key, T value, IRedisClient redisClient)
  {
   return redisClient.Set<T>(key, value, expiresIn);
  }
  /// <summary>
  /// 将某类数据插入到list中
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key">一般是BiaoDiGuid</param>
  /// <param name="item"></param>
  /// <param name="redisClient"></param>
  public static void Add2List<T>(string key, T item, IRedisClient redisClient)
  {
   var redis = redisClient.As<T>();
   var list = redis.Lists[GetListKey(key)];
   list.Add(item);
  }
  /// <summary>
  /// 获取一个list
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="key"></param>
  /// <param name="redisClient"></param>
  /// <returns></returns>
  public static IRedisList<T> GetList<T>(string key, IRedisClient redisClient)
  {
   var redis = redisClient.As<T>();
   return redis.Lists[GetListKey(key)];
  }
  public static string GetListKey(string key, string prefix = null)
  {
   if (string.IsNullOrEmpty(prefix))
   {
    return "urn:" + key;
   }
   else
   {
    return "urn:" + prefix + ":" + key;
   }
  }
 }

View Code

配备安装

3.3将参数写入配置文件

<appSettings>
<add key="WriteServerList" value="127.0.0.1:6379" />
<add key="ReadServerList" value="127.0.0.1:6379" />
<add key="MaxWritePoolSize" value="60" />
<add key="MaxReadPoolSize" value="60" />
<add key="AutoStart" value="true" />
<add key="LocalCacheTime" value="1800" />
<add key="RecordeLog" value="false" />
</appSettings>
3.4读取配置文件参数类

public class RedisConfigInfo
{
 public static string WriteServerList = ConfigurationManager.AppSettings["WriteServerList"];
 public static string ReadServerList = ConfigurationManager.AppSettings["ReadServerList"];
 public static int MaxWritePoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxWritePoolSize"]);
 public static int MaxReadPoolSize = Convert.ToInt32(ConfigurationManager.AppSettings["MaxReadPoolSize"]);
 public static int LocalCacheTime = Convert.ToInt32(ConfigurationManager.AppSettings["LocalCacheTime"]);
 public static bool AutoStart = ConfigurationManager.AppSettings["AutoStart"].Equals("true") ? true : false;
}

 

使用:

protected void btn1_Click(object sender, EventArgs e)
  {
   string UserName;
   //读取数据,如果缓存存在直接从缓存中读取,否则从数据库读取然后写入redis
   using (var redisClient = RedisManager.GetClient())
   {
    UserName = redisClient.Get<string>("UserInfo_123");
    if (string.IsNullOrEmpty(UserName)) //初始化缓存
    {
     //TODO 从数据库中获取数据,并写入缓存
     UserName = "张三";
     redisClient.Set<string>("UserInfo_123", UserName, DateTime.Now.AddSeconds(10));
     lbtest.Text = "数据库数据:" + "张三";
     return;
    }
    lbtest.Text = "Redis缓存数据:" + UserName;
   }
  }

 

.初探Redis

5.

总结

正文简单介绍了Redis,Redis如何在Windows下安装,以及哪些在.NET中动用访问和选拔Redis,希望对您拥有援助,下文将助教如何在.NET中网Redis中读写复杂对象。

相关文章