【每日更新】【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中讀寫複雜對象。

相關文章
相關標籤/搜索