【每日更新】【Redis学习】

 

5.html

Redis订阅和发布模式和Redis事务

-------------------Redis事务-------------------
一、概念:
    redis中的事务是一组命令的集合。事务同命令同样都是redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
 
二、事务的两种属性
    一、事务是一个单独的隔离操做:事务中的全部命令都会序列化、按顺序的执行。事务在执行的过程当中,不会被其余客户端发送过来的命令请求所打断。
    二、redis事务是原子。原子意味着要么全部的命令都执行,要么都不执行。

4.git

String能够包含任何数据,好比jpg图片或者序列化的对象;string类型是Redis最基本的数据类型,一个键最大能存储512MBgithub

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

 List列表类型能够存储一个有序的字符串列表,经常使用的操做时向列表两端添加元素,或者得到列表的某一个片断;列表类型内部是使用双向链表(double linked list)实现的,因此向列表两端添加元素的时间复杂度为O(I),获取越接近两端的元素,速度就越快。数据库

列表具备有序性,集合具备惟一性。windows

集合Set:多个集合类型键之间还能够进行并集、交集、差集运算。缓存

有序集合Sort-Set...app

 

3.ide

Redis是一个用的比较普遍的Key/Value的内存数据库,新浪微博、Github、StackOverflow 等大型应用中都用其做为 高速缓存。wordpress

Redis自己没有提供Windows版本的,而且在Windows上也不太稳定,通常都将其部署到Linux环境下,Redis能够在其官网上下载

Beetle.Redis虽然不够完整,可是我说几个优势:
一、底层很是稳定,几乎没有性能损耗。
二、链接数很是稳定,我用了整整一个月(通过了双十一的考验),一点问题都没有。
三、代码量很小,只有十几个类,彻底开源。

 

2.

 

RedisHelper帮助类

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安装与启动

1. 下载Redis

Redis自己没有提供Windows版本的,而且在Windows上也不太稳定,通常都将其部署到Linux环境下,Redis能够在其官网上下载, MSOpenTech中提供了Windows版本,这里为了学习安装这一版本。

Download Redis

点击跳转到Github后,直接点击Zip下载。下载后根据本身计算机的版本选择32位或者64位进行安装。我将64位的解压后放到D:\Redis文件夹下,同时将文件夹内的redis.conf也拷贝到该目录下,这个是redis的配置信息:

Redis 64 bit

2. 启动Redis

在Windows下面启用Redis和启动MogoDB同样,须要使用命令行启动,首先定位到该目录,运行以下命令:

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

Redis start

由于是在本机运行的,这里要注意端口号,同时要保持端口不要关闭。

固然您也能够将Redis做为Windows服务在后台一直开启。

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

Redis cmd

同时,在咱们往redis上写数据的时候,Redis服务也会定时的往文件中写数据

redis server run background

这里仅简单的介绍了get和set命令,更多命令能够查看 http://redis.io/commands

.初探Redis

下载ServiceStack.Redis

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

ServiceStackRedis

.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的值了。

output of the first redis application

在前面的命令行中,咱们网city中存入了Shanghai,如今咱们获取到了这个值。

ServerStack中有不少方法能够在.NET中调用,其类结构图以下:

Redis-annotated

总结

本文简单介绍了Redis,Redis如何在Windows下安装,以及如何在.NET中使用访问和使用Redis,但愿对您有所帮助,下文将讲解如何在.NET中网Redis中读写复杂对象。

相关文章
相关标签/搜索