記錄一下Redis的安裝與基本使用redis
一.Redis簡介
Redis(REmote DIctionary Server)遠程字典服務器,免費開源,是一個高性能的(Key/Value)分佈式內存數據庫。其特色爲,數據類型豐富,各類各樣的問題均可以映射到這些數據結構中,Redis數據結構致力於解決用戶問題,性能方面,Redis支持集羣加之自己做爲內存數據庫咱們能夠很方便的進行每秒數千萬的訪問,而且Redis支持數據持久化,能夠將內存中的數據保存到磁盤中,重啓的時候能夠再次加載使用,集羣方面Redis支持數據備份和容災恢復,保證了高可用,支持多種語言接口,支持事務、發佈訂閱等功能,整體性價比較高。數據庫
二.Redis下載地址
下載地址 https://pan.baidu.com/s/1mlv6OdLhbzofYcM2D--hIwwindows
提取碼 ly4i服務器
三.Redis 服務端啓動配置
1.Windows服務啓動Redis數據結構
2.手動啓動Redis app
四.Redis 客戶端控制檯簡易命令操做
1.鏈接Redisdom
redis-cli.exe -h 127.0.0.1 -p 6380 -a abc+2015
2.設置與獲取String異步
3.設置與獲取List分佈式
rpush list 1,2,3 rpush list 4 lrange list 0 1
4.控制檯命令執行界面工具
五.Redis可視化工具
1.下載地址
下載地址 https://pan.baidu.com/s/1_OtZ14_7M4F7NPMZQuDF8g
提取碼 1y5c
2.登入鏈接
3. Key/Val操做界面
六.C# Redis 基本操做
1.Nuget StackExchange.Redis與Newtonsoft.Json
2.C# Redis 基本操做
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StackExchange.Redis;
using Newtonsoft.Json;
namespace RedisDemo
{
class Program
{
static void Main(string[] args)
{
//127.0.0.1:6379:IP,端口
//password:Redis密碼
//connectTimeout:鏈接超時時間,這裏設置的是1000毫秒
//connectRetry:重試鏈接次數
//syncTimeout:同步操做默認超時時間
ConnectionMultiplexer _conn = ConnectionMultiplexer.Connect("127.0.0.1:6380,password=abc+2015,connectTimeout=1000,connectRetry=1,syncTimeout=1000");
var db = _conn.GetDatabase(5);//指定鏈接庫 5
//存取單值
db.StringSet("表面處理", "沉金");
string str = db.StringGet("表面處理");
db.StringSet("板厚", 1.0, TimeSpan.FromSeconds(60)); //設置60秒過時
//單值遞增或遞減
var intA = db.StringIncrement("Increment", 2);//Redis值 遞增2
var intB = db.StringDecrement("Decrement", 1);//Redis值 遞減1
//存取對象
mktxhglb model1 = new mktxhglb()
{
pdctno = "at00101ca0",
LayerNum = 10,
BoardThick = 1.0,
SurfaceType = "沉金"
};
string modelJson1 = JsonConvert.SerializeObject(model1);
db.StringSet("mktxhglb", modelJson1);
string modelJson2 = db.StringGet("mktxhglb");
mktxhglb model2 = JsonConvert.DeserializeObject<mktxhglb>(modelJson2);
//存取List
db.ListRightPush("list", 1); //尾 追加值
db.ListRightPush("list", 2); //尾 追加值
db.ListLeftPush("list", 10); //頂 追加值
db.ListLeftPush("list", 20); //頂 追加值
var list = db.ListRange("list"); //獲取list列表 20,10,1,2
var rightPop = db.ListRightPop("list");//尾 取出值 2
var leftpop = db.ListLeftPop("list"); //頂 取出值 20
//哈希(Redis自己是key/value,至關於Value中再嵌入一層key/value)
db.HashSet("產品信息", "板長", 200);
db.HashSet("產品信息", "板寬", 150);
db.HashSet("產品信息", "板厚", 1.0);
db.HashSet("產品信息", "表面處理", "沉錫");
var HashList = db.HashGetAll("產品信息");//獲取全部Hash
foreach (var item in HashList)
{
Console.WriteLine($"產品信息 {item.Name} { item.Value}");
}
var BoardLenght = db.HashGet("產品信息", "板長");
//消息發佈與訂閱 和MQ消息隊列功能
ISubscriber Subscriber = _conn.GetSubscriber();
//訂閱消息 pcbren.Channel通道
Subscriber.Subscribe("pcbren.Channel", new Action<RedisChannel, RedisValue>((channel, msg) =>
{
Console.WriteLine($"收到消息:" + msg);
}));
//發送消息 pcbren.Channel通道
Subscriber.Publish("pcbren.Channel", $"發送信息 {DateTime.Now}");
//取消訂閱
Subscriber.Unsubscribe("pcbren.Channel");
//批量操做
var bat = db.CreateBatch();
//批量寫
Task t1 = bat.StringSetAsync("孔銅", 25);
Task t2 = bat.StringSetAsync("面銅", 63);
bat.Execute();
Task.WaitAll(t1, t2);
//批量讀
List<Task<RedisValue>> valueList = new List<Task<RedisValue>>();
valueList.Add(bat.StringGetAsync("孔銅"));
valueList.Add(bat.StringGetAsync("面銅"));
bat.Execute();
}
}
public class mktxhglb
{
/// <summary>
/// 生產型號
/// </summary>
public string pdctno { get; set; }
/// <summary>
/// 層數
/// </summary>
public int LayerNum { get; set; }
/// <summary>
/// 板厚
/// </summary>
public double BoardThick { get; set; }
/// <summary>
/// 表面處理類型
/// </summary>
public string SurfaceType { get; set; }
}
}
3.StackExchange.Redis Demo (C#)
地址 https://pan.baidu.com/s/1rn8GhiszkDQ7ccrqNcNYYA
提取碼 jsue
七.Redis配置參數
redis.windows.conf 配置文件參數說明
daemonize:如須要在後臺運行,把該項的值改成yes
pdifile:把pid文件放在/var/run/redis.pid,能夠配置到其餘地址
bind:指定redis只接收來自該IP的請求,若是不設置,那麼將處理全部請求,在生產環節中最好設置該項
port:監聽端口,默認爲6379
timeout:設置客戶端鏈接時的超時時間,單位爲秒
loglevel:等級分爲4級,debug,revbose,notice和warning。生產環境下通常開啓notice
logfile:配置log文件地址,默認使用標準輸出,即打印在命令行終端的端口上
database:設置數據庫的個數,默認使用的數據庫是0
save:設置redis進行數據庫鏡像的頻率
rdbcompression:在進行鏡像備份時,是否進行壓縮
dbfilename:鏡像備份文件的文件名
dir:數據庫鏡像備份的文件放置的路徑
slaveof:設置該數據庫爲其餘數據庫的從數據庫
masterauth:當主數據庫鏈接須要密碼驗證時,在這裏設定
requirepass:設置客戶端鏈接後進行任何其餘指定前須要使用的密碼
maxclients:限制同時鏈接的客戶端數量
maxmemory:設置redis可以使用的最大內存
appendonly:開啓appendonly模式後,redis會把每一次所接收到的寫操做都追加到appendonly.aof文件中,當redis從新啓動時,會從該文件恢復出以前的狀態
appendfsync:設置appendonly.aof文件進行同步的頻率
vm_enabled:是否開啓虛擬內存支持
vm_swap_file:設置虛擬內存的交換文件的路徑
vm_max_momery:設置開啓虛擬內存後,redis將使用的最大物理內存的大小,默認爲0
vm_page_size:設置虛擬內存頁的大小
vm_pages:設置交換文件的總的page數量
vm_max_thrrads:設置vm IO同時使用的線程數量
八.Redis更多命令
一、鏈接操做相關的命令
- quit:關閉鏈接(connection)
- auth:簡單密碼認證
二、對value操做的命令
- exists(key):確認一個key是否存在
- del(key):刪除一個key
- type(key):返回值的類型
- keys(pattern):返回知足給定pattern的全部key
- randomkey:隨機返回key空間的一個key
- rename(oldname, newname):將key由oldname重命名爲newname,若newname存在則刪除newname表示的key
- dbsize:返回當前數據庫中key的數目
- expire:設定一個key的活動時間(s)
- ttl:得到一個key的活動時間
- select(index):按索引查詢
- move(key, dbindex):將當前數據庫中的key轉移到有dbindex索引的數據庫
- flushdb:刪除當前選擇數據庫中的全部key
- flushall:刪除全部數據庫中的全部key
三、對String操做的命令
- set(key, value):給數據庫中名稱爲key的string賦予值value
- get(key):返回數據庫中名稱爲key的string的value
- getset(key, value):給名稱爲key的string賦予上一次的value
- mget(key1, key2,…, key N):返回庫中多個string(它們的名稱爲key1,key2…)的value
- setnx(key, value):若是不存在名稱爲key的string,則向庫中添加string,名稱爲key,值爲value
- setex(key, time, value):向庫中添加string(名稱爲key,值爲value)同時,設定過時時間time
- mset(key1, value1, key2, value2,…key N, value N):同時給多個string賦值,名稱爲key i的string賦值value i
- msetnx(key1, value1, key2, value2,…key N, value N):若是全部名稱爲key i的string都不存在,則向庫中添加string,名稱key i賦值爲value i
- incr(key):名稱爲key的string增1操做
- incrby(key, integer):名稱爲key的string增長integer
- decr(key):名稱爲key的string減1操做
- decrby(key, integer):名稱爲key的string減小integer
- append(key, value):名稱爲key的string的值附加value
- substr(key, start, end):返回名稱爲key的string的value的子串
四、對List操做的命令
- rpush(key, value):在名稱爲key的list尾添加一個值爲value的元素
- lpush(key, value):在名稱爲key的list頭添加一個值爲value的 元素
- llen(key):返回名稱爲key的list的長度
- lrange(key, start, end):返回名稱爲key的list中start至end之間的元素(下標從0開始,下同)
- ltrim(key, start, end):截取名稱爲key的list,保留start至end之間的元素
- lindex(key, index):返回名稱爲key的list中index位置的元素
- lset(key, index, value):給名稱爲key的list中index位置的元素賦值爲value
- lrem(key, count, value):刪除count個名稱爲key的list中值爲value的元素。count爲0,刪除全部值爲value的元素,count>0從 頭至尾刪除count個值爲value的元素,count<0從尾到頭刪除|count|個值爲value的元素。 lpop(key):返回並刪除名稱爲key的list中的首元素 rpop(key):返回並刪除名稱爲key的list中的尾元素 blpop(key1, key2,… key N, timeout):lpop命令的block版本。即當timeout爲0時,若遇到名稱爲key i的list不存在或該list爲空,則命令結束。若是timeout>0,則遇到上述狀況時,等待timeout秒,若是問題沒有解決,則對 keyi+1開始的list執行pop操做。
- brpop(key1, key2,… key N, timeout):rpop的block版本。參考上一命令。
- rpoplpush(srckey, dstkey):返回並刪除名稱爲srckey的list的尾元素,並將該元素添加到名稱爲dstkey的list的頭部
五、對Set操做的命令
- sadd(key, member):向名稱爲key的set中添加元素member
- srem(key, member) :刪除名稱爲key的set中的元素member
- spop(key) :隨機返回並刪除名稱爲key的set中一個元素
- smove(srckey, dstkey, member) :將member元素從名稱爲srckey的集合移到名稱爲dstkey的集合
- scard(key) :返回名稱爲key的set的基數
- sismember(key, member) :測試member是不是名稱爲key的set的元素
- sinter(key1, key2,…key N) :求交集
- sinterstore(dstkey, key1, key2,…key N) :求交集並將交集保存到dstkey的集合
- sunion(key1, key2,…key N) :求並集
- sunionstore(dstkey, key1, key2,…key N) :求並集並將並集保存到dstkey的集合
- sdiff(key1, key2,…key N) :求差集
- sdiffstore(dstkey, key1, key2,…key N) :求差集並將差集保存到dstkey的集合
- smembers(key) :返回名稱爲key的set的全部元素
- srandmember(key) :隨機返回名稱爲key的set的一個元素
六、對zset(sorted set)操做的命令
- zadd(key, score, member):向名稱爲key的zset中添加元素member,score用於排序。若是該元素已經存在,則根據score更新該元素的順序。
- zrem(key, member) :刪除名稱爲key的zset中的元素member
- zincrby(key, increment, member) :若是在名稱爲key的zset中已經存在元素member,則該元素的score增長increment;不然向集合中添加該元素,其score的值爲increment
- zrank(key, member) :返回名稱爲key的zset(元素已按score從小到大排序)中member元素的rank(即index,從0開始),若沒有member元素,返回「nil」
- zrevrank(key, member) :返回名稱爲key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),若沒有member元素,返回「nil」
- zrange(key, start, end):返回名稱爲key的zset(元素已按score從小到大排序)中的index從start到end的全部元素
- zrevrange(key, start, end):返回名稱爲key的zset(元素已按score從大到小排序)中的index從start到end的全部元素
- zrangebyscore(key, min, max):返回名稱爲key的zset中score >= min且score <= max的全部元素 zcard(key):返回名稱爲key的zset的基數 zscore(key, element):返回名稱爲key的zset中元素element的score zremrangebyrank(key, min, max):刪除名稱爲key的zset中rank >= min且rank <= max的全部元素 zremrangebyscore(key, min, max) :刪除名稱爲key的zset中score >= min且score <= max的全部元素
- zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):對N個zset求並集和交集,並將最後的集合保存在dstkeyN中。對於集合中每個元素的score,在進行 AGGREGATE運算前,都要乘以對於的WEIGHT參數。若是沒有提供WEIGHT,默認爲1。默認的AGGREGATE是SUM,即結果集合中元素 的score是全部集合對應元素進行SUM運算的值,而MIN和MAX是指,結果集合中元素的score是全部集合對應元素中最小值和最大值。
七、對Hash操做的命令
- hset(key, field, value):向名稱爲key的hash中添加元素field<—>value
- hget(key, field):返回名稱爲key的hash中field對應的value
- hmget(key, field1, …,field N):返回名稱爲key的hash中field i對應的value
- hmset(key, field1, value1,…,field N, value N):向名稱爲key的hash中添加元素field i<—>value i
- hincrby(key, field, integer):將名稱爲key的hash中field的value增長integer
- hexists(key, field):名稱爲key的hash中是否存在鍵爲field的域
- hdel(key, field):刪除名稱爲key的hash中鍵爲field的域
- hlen(key):返回名稱爲key的hash中元素個數
- hkeys(key):返回名稱爲key的hash中全部鍵
- hvals(key):返回名稱爲key的hash中全部鍵對應的value
- hgetall(key):返回名稱爲key的hash中全部的鍵(field)及其對應的value
八、持久化
- save:將數據同步保存到磁盤
- bgsave:將數據異步保存到磁盤
- lastsave:返回上次成功將數據保存到磁盤的Unix時戳
- shundown:將數據同步保存到磁盤,而後關閉服務
九、遠程服務控制
- info:提供服務器的信息和統計
- monitor:實時轉儲收到的請求
- slaveof:改變複製策略設置
- config:在運行時配置Redis服務器