之前大四時候實習的公司有使用過Redis,不過那時所有配置均由主管完成了,而我也只是處於能使用的階段。
時隔1年多,近期回想起這貨,在研究中,想把它整合進現在公司的網站系統中,做做數據快照(已完成)和數據緩存,現在把自己學習的一個過程寫下來。
首先聲明,我用的是windows系統開發,所以以下所有的文字只和windows系統有關,其他系統的沒研究過!
Redis的簡介,度娘一搜一大把,這里就不做闡述了。
首先要先下載Redis,地址:https://code.google.com/p/servicestack/wiki/RedisWindowsDownload
(至BZ寫這篇隨筆時,使用的最新版本為2.4.5,以下介紹均以此版本為基准)
解壓下載的Redis,選擇對應的系統版本:
其中:
redis-server.exe:服務程序
redis-check-dump.exe:本地數據庫檢查
redis-check-aof.exe:更新日志檢查
redis-benchmark.exe:性能測試,用以模擬同時由N個客戶端發送M個 SETs/GETs 查詢
redis.conf:配置文件
配置文件
可另見配置文件說明中文版:http://my.oschina.net/liuxd/blog/61034
打開服務端
打開redis-server.exe,默認使用默認的配置,也可自己指定配置文件(打開cmd輸入命令行):
(以放在D盤Redis目錄下為例,依次輸入)
d:
cd redis
redis-server xxx.conf(xxx.conf為配置文件名)
打開命令行操作工具
打開redis-cli,默認使用127.0.0.1:6379,同服務端一樣也可自己指定:
redis-cli -h 127.0.0.1 -p 6379(Host、Port可自己指定)
redis命令可參考:http://redis.io/commands
中文版:https://redis.readthedocs.org/en/latest/
在系統中以服務的形式運行服務端(無需一直打開redis-server)
到 https://github.com/kcherenkov/redis-windows-service 下載redis-windows-service,下載后,用visual studio打開並編譯,在bin文件夾中找到生成的RedisService.exe文件,復制到同redis-server.exe同一個文件夾中。
打開cmd,創建服務:
sc create Redis start= auto DisplayName= Redis binpath= "\"d:\tools\redis-2.4.5-win32-win64\64bit\RedisService.exe(RedisService.exe路徑)\" \"d:\tools\redis-2.4.5-win32-win64\64bit\redis.conf(redis.conf路徑)\""
創建成功后,每次開機均會自動啟動,可在服務列表中自己設置
RedisAdminUI
asp.net版本的RedisUI,可實時查看Redis服務情況及數據情況。
下載地址:https://code.google.com/p/servicestack/downloads/detail?name=RedisAdminUI.zip&can=2&q=
部署到IIS,使用v2.0集成程序池
.Net Redis
項目中引用ServiceStack dll,可使用NuGet獲取,亦可在網上自己下載。
var rc = new RedisClient([Host], [Port]);
然后只需要把Redis命令看得差不多了,這個也就會用了。我自己只用了里面幾個最基本最常用的,其他一些復雜的,都是直接調用這幾個方法:
SetEntry、GetValue
AddItemToList、AddRangeToList、GetAllItemsFromList、RemoveItemFromList
AddItemToSet、AddRangeToSet、GetAllItemsFromSet、RemoveItemFromSet
AddItemToSortedSet、GetAllItemsFromSortedSet、GetAllItemsFromSortedSetDesc、GetAllWithScoresFromSortedSet、RemoveItemFromSortedSet
SetEntryInHash、SetRangeInHash、GetValueFromHash、GetValuesFromHash、GetAllEntriesFromHash、GetHashKeys、RemoveEntryFromHash
Remove、Del
目前我只實現了這幾個,Get、Set方法基礎參數類型均為string,我覺得就目前來說已經夠用了(當然不排除以后會根據業務需要實現更多的方法)。
至於值的問題,有些列表我們是將Entity Model序列化為Json字符串進行保存的,Get的時候再將字符串反序列化成Entity Model。
Python Redis
我使用的是redis-py,當然網上也有其他的,都說了各自的好處什么的,自己選擇。
到 https://github.com/andymccurdy/redis-py 下載后,安裝(我安裝的是Python3.3,沒安裝的童鞋先行安裝,選擇自己需要的版本)
Python腳本我們是用來做數據的初始化的,功能也簡單:
import redis REDIS_HOST = '127.0.0.1' REDIS_PORT = 6379 class connection_model: 'Get Data Base Connection Model' @staticmethod def get_redis_connection(): 'Get The Redis Connection' return redis.StrictRedis(host = REDIS_HOST, port = REDIS_PORT)
獲取Connection后,就可以進行各種操作了(我只是試過幾個基礎的方法,其他方法后面有時間再慢慢研究):
set、get、mset、mget
lpush、lrange
sadd、smembers
hset、hget、hmset、hmget、hgetall
(帶"m"的都是多個/多組 get、set 的)
寫到這了,休息一下繼續下午上班了。