Redis使用詳細教程

来源:http://www.cnblogs.com/favana/archive/2016/06/14/5584603.html
-Advertisement-
Play Games

一、Redis基礎部分: 1、redis介紹與安裝比mysql快10倍以上 *****************redis適用場合**************** 1.取最新N個數據的操作 2.排行榜應用,取TOP N 操作 3.需要精確設定過期時間的應用 4.計數器應用 5.Uniq操作,獲取某段時 ...


一、Redis基礎部分: 

1、redis介紹與安裝比mysql快10倍以上 

*****************redis適用場合****************

1.取最新N個數據的操作

2.排行榜應用,取TOP N 操作

3.需要精確設定過期時間的應用

4.計數器應用

5.Uniq操作,獲取某段時間所有數據排重值

6.實時系統,反垃圾系統7.Pub/Sub構建實時消息系統

7.Pub/Sub構建實時消息系統8.構建隊列系統

9.緩存

=============================================

SET操作每秒鐘 110000 次,GET操作每秒鐘 81000 次,伺服器配置如下:

Linux 2.6, Xeon X3320 2.5Ghz.

stackoverflow 網站使用 Redis 做為緩存伺服器。

同時也會將數據寫到硬碟上。所以數據是安全的(除突然斷電外,重啟服務會寫到dump.rdb文件中)

 

1.安裝: 

tar zxvf redis-2.6.9.tar.gz

cd redis-2.6.9

make

cd src && make install

2.移動配置文件位置(為了便於管理)

cd /usr/local/

mkdir -p /usr/local/redis/bin

mkdir -p /usr/local/redis/etc

mv /lamp/redis-2.6.9/redis.conf /usr/local/redis/etc

cd /lamp/redis-2.6.9/src

mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin

3.修改配置文件 

vi /usr/local/redis/etc/redis.conf

 

一、將daemonize no 中no改為yes[yes指後臺運行]

4.啟動/隨機啟動:

cd /usr/local/redis/bin

./redis-server /usr/local/redis/etc/redis.conf#啟動redis並指定配置文件。

#vi /etc/rc.local #設置隨機啟動。

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

5.查看是否啟動成功 

ps -ef | grep redis

netstat -tunpl | grep 6379#查看埠是否占用。

6.進入客戶端/退出 

cd /usr/local/redis/bin

./redis-cli#進入

quit#退出

7.關閉redis  

pkill redis-server#關閉

./redis-cli shutdown#關閉

************************************Redis安全************************************

 

Redis的安全性???(由以下4種方式)

1.用ACL控制器安全性。

2.在redis.conf配置文件增加下麵這一行配置,即可把redis綁定在單個介面上(但並不是只有接受這個網卡的數據)。

bind 127.0.0.1

3.給redis加上較長密碼(無需要記住)

4.在redis.conf配置啟用認證功能。

5.SSL代理

6.禁用指定命令。

************************************** Redis配置 **********************************************

daemonize    如果需要在後臺運行,把該項改為yes  

pidfile      配置多個pid的地址 預設在/var/run/redis.pid

bind 綁定ip,設置後只接受來自該ip的請求

port 監聽埠,預設為6379

timeout      設置客戶端連接時的超時時間,單位為秒

loglevel     分為4級,debug、verbose、notice、warning

logfile      配置log文件地址

databases    設置資料庫的個數,預設使用的資料庫為0

save         設置redis進行資料庫鏡像的頻率

rdbcompression    在進行鏡像備份時,是否進行壓縮

Dbfilename        鏡像備份文件的文件名

Dir   資料庫鏡像備份的文件放置路徑

Slaveof     設置資料庫為其他資料庫的從資料庫

Masterauth 主資料庫連接需要的密碼驗證

Requirepass     設置登錄時需要使用的密碼

Maxclients 限制同時連接的客戶數量

Maxmemory 設置redis能夠使用的最大記憶體

Appendonly 開啟append only模式

以下瞭解即可:

Appendfsync 設置對appendonly.aof文件同步的頻率

vm-enabled 是否開啟虛擬記憶體支持

vm-swap-file 設置虛擬記憶體的交換文件路徑

vm-max-memory 設置redis使用的最大物理記憶體大小

vm-page-size 設置虛擬記憶體的頁大小

vm-pages 設置交換文件的總的page數量

vm-max-threads 設置VM IO同時使用的線程數量

Glueoutputbuf 把小的輸出緩存存放在一起

hash-max-zipmap-entries 設置hash的臨界值

Activerehashing 重新hash

*******************************************************************

5種數據類型:字元串、哈希、鏈表、集合、有序集合。

支持:push/pop、add/remove 、取交集、並集、差集、排序。

redis<===同步====>mysql

同時也會將數據寫到硬碟上。所以數據是安全的(除突然斷電外,重啟服務會寫到dump.rdb文件中)

*******************************************************************

select num#選擇庫,預設在0庫,共16個庫

auth liweijie#授權用戶所需密碼(密碼就是redis.conf中配置的密碼)

flushdb#清空資料庫。

String(字元串)類型: 

set name lijie#設置鍵name的值為lijie

get name#獲取name的值。

keys *#查詢所有的鍵。

setnx name liweijie#如果鍵已存在則返回0,不更新,防止覆蓋。

setex haircolor 10 red #設置鍵的值的有效期為10秒。

setrange email 6 lampbre.com#替換鍵的值從第6個字元開始換為lampbre.com

mset name1 李大偉 name2 李小偉#設置多個鍵的值。

msetnxname1 張三 name3 李四#判斷鍵是否存在,不存在則設置,否則不設置返回0

mget name1 name2 name3#一次獲取多個鍵的值。

getset name1 Tom#重新設置鍵的值,並返回舊的鍵值。

getrange email 6 18#截取email鍵的值,從第6-18位間的字元。

incr uid#每次自增1 (如果key中uid不存在,則設置並從0開始,下同)

incrby uid 5#每次自增5 

incrby uid -5#每次自減5 

decr uid #每次自減1

decrby uid 5#每次自減5

appendname1 @126.com#給name1的值,添加字元串@126.com

strlenname1#返回鍵name1的值的長度。

*************************************************************************

Hashes(哈希)類型: 

hset user:001 name liweijie#哈希設置用戶user:001的name鍵值為liweijie

hset user:001 age 21#同樣,增加一個age鍵值為21

hsetnx user:001 age 22#同上,但檢測鍵是否存在。若不存在創建。

hmset user:002 name liweijie2 age 26 sex 1#同時設置多個鍵的值。

hget user:001 name#哈希獲取用戶user:001的name鍵的值。

hget user:001 age #同上。

hmget user:001 name age sex#獲取多個指定的鍵的值。

hgetall user:001#獲取所有鍵的值。

hincrbyuser:001 age -8#在指定鍵上加上給定的值。

hexists user:001 sex#檢測指定的鍵值是否存在。

hlen user:001#返回指定哈希的鍵個數/欄位個數。

hdel user:001 sex#刪除指定(user:001)哈希的指定欄位或是鍵值。

hkeys user:003#返回哈希里所有欄位或是鍵值。

*********************************************************************

Lists(鏈表)類型及操作(棧或隊列): 

lpush mylist "world"#從頭部插入字元串

lpush mylist "hello"#同上

lrange mylist 0 -1#獲取從0到最後一個如[1) "hello" 2) "world"]

rpush mylist "jiejie"#在尾部插入

linsert mylist before "hello" "this is linsert" #指定插入位置(在hello之前插入)。

lset mylist 0 "what"#設置修改指定下標的值。

lrem mylist 1 "hello"#刪除(1個)一個值為hello的元素。(n<0從尾部刪除,n=0全部刪除)

ltrim mylist 1 2 #保留表中下標為1/2的元素。

lpop mylist#彈出開頭元素並返回。

rpop mylist#彈出尾部元素並返回。

rpoplpush mylist mylist2 #從mylist尾部彈出插入到mylist2的頭部。

lindex mylist 0#獲取表下標為0的元素值。

llen mylist#返回表元素個數(相當於count($arr  ))。

*********************************************************************

sets(集合)類型及操作(好友推薦、blog、tag功能): 

smembers myset#查看myset集合中所有元素值。

sadd myset "hello"#向mysets集合中添加一個值hello

srem myset "hello"#刪除myset集合中名稱為hello的元素。

spop myset #隨機彈出並返回mysets中的一個元素。

sdiff myset2 myset3#返回myset2中的與myset3的差集(以myset2為準)。

sdiffstore myset4 myset2 myset3#返回myset2中的與myset3的差集,並存入myset4中去。

sinter myset2 myset3#返回myset2與myset3的交集。

sinterstore myset5 myset2 myset3#返回myset2與myset3的交集,並存入myset5中去。

sunion myset2 myset3#求並集(去重覆)

sunionstore myset6 myset2 myset3#求並集,並存入myset6中去。

smove myset2 myset3 "three"#將myset2中的three移到myset3中去。

scard myset2#返回元素個數。

sismember myset2 "one"#判斷元素one是不是myset2集合的(相當於is_array())。

srandmember myset2#隨機返回myset2集合中的一個元素,但不刪除(相當於array_rand())。

*********************************************************************

sorted sets(有序集合)類型及操作(以scores排序): 

zadd myzset 1 "one"#向順序1的添加元素one

zadd myzset 2 "two"#同上。

zadd myzset 3 "two"#相當於更新順序為2的值

zrange myzset 0 -1 withscores#查看所有元素並帶上排序(預設升序)。

zrem myzset "two"#刪除two

zincrby myzset 2 "two"#將two的順序值加上2

zrank myzset "two"#返回集合中元素的索引下標值。

zrevrank myzset two#元素反轉並返回新下標值。

zrevrange myzset 0 -1 withscores#按順序反轉(相當於降序排序)

zrangebyscore myzset 1 10 withscores#返回順序為1-10的元素(可做分頁)。

zcount myzset 1 10 #返回順序在1-10之間元素的個數。

zcard myzset#返回集合中所有元素的個數。

zremrangebyrank myzset 1 2#刪除集合中下標為1到2的元素。

zremrangebyscore myzset 1 10#刪除集合中順序為1到10的元素。

Redis常用命令  

鍵/值相關命令。

keys * #查詢所有

keys user*#查詢指定的

exists user:001#判斷是否存在。

del name#刪除指定的鍵。

expire addr 10#設置過期時間

ttl addr#查詢過期時間

select 0 #選擇資料庫

move age 1#將age移到1資料庫。

get age #獲取

persist age#移除age的過期時間。

randomkey#隨機返回一個key

rename name1 name2#重命名鍵

type myset#返回鍵的類型。

ping #測試redis連接是否存活。

echo lamp#輸出一個lamp

select 10#選擇資料庫。

quit/exit/crtl+C#退出客戶端

dbsize#返回庫里的鍵的個數。

伺服器相關命令:

info#顯示redis伺服器的相關信息。

config get */loglevel #返回所有/指定的配置信息。

flushdb#刪除當前庫中的所有鍵/表。

flushall#刪除所有資料庫中的所有鍵/表

 

二、Redis高級部分: 

1、Redis安全性:  

1.用ACL控制器安全性。

2.給redis加上較長密碼 

# requirepass foobared 

requirepass beijing 

3.在redis.conf配置啟用認證功能。

方式一:Auth beijing

方式二:./redis-cli -a beijing

4.在redis.conf配置文件增加下麵這一行配置,即可把redis綁定在單個介面上(但並不是只有接受這個網卡的數據)。

bind 127.0.0.1(單台機器的時候可以配置,分散式或主從複製時最好不要配置)

5.SSL代理

6.禁用指定命令。

2、Redis主從複製:  

redis只需在從伺服器(slave)上配置即可:

slaveof 211.122.11.11 6379 #指定master 的ip 和埠 

masterauth beijing#這是master主機的密碼 

Info#查看主/從伺服器的狀態。

3、Redis事務處理:  

Redis事務很不完善。

4、Redis持久化機制:  

1.兩種方式:一、備份數據到磁碟(快照)[ snapshotting(快照)也是預設方式]

   二、記錄操作命令[ Append-only file(縮寫aof)的方式]

一、備份數據到磁碟(快照)[ snapshotting(快照)也是預設方式] 

save 900 1 #900秒內如果超過1個key被修改,則發起快照保存

save 300 10 #300秒內容如超過10個key被修改,則發起快照保存

save 60 10000

二、記錄操作命令[ Append-only file(縮寫aof)的方式](較安全持久化) 

appendonly yes #啟用aof 持久化方式 

# appendfsync always //收到寫命令就立即寫入磁碟,最慢,但是保證完全的持久化 

appendfsync everysec //每秒鐘寫入磁碟一次,在性能和持久化方面做了很好的折中

# appendfsync no //完全依賴os,性能最好,持久化沒保證

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單例模式 概念相關 單例模式 在程式運行過程,一個類只有一個實例 使用場合 在整個應用程式中,共用一份資源(這份資源只需要創建初始化1次) static static關鍵字會在聲明變數的時候分配記憶體,在程式運行期間只分配一次記憶體。之後再訪問時,實際都是在訪問原先分配的記憶體 如果使用static來修飾 ...
  • 對話框不能單獨存在,依賴於窗體,有顯示標題,有模式 獲取Dialog對象,new出來,構造參數:Frame對象,String的標題,模式 窗體內部的內容,Label對象,Button對象,調用Dialog對象的add()方法,把這兩個添加進去 Dialog也是一個普通的窗體,需要設置尺寸和位置 這個 ...
  • 現如今,智能手機是人手一份。每天我們都通過手機與外界溝通交流,手機作為必不可少的媒介,無形中記錄著我們日常生活中的點點滴滴。這些信息主要包括個人位置信息、通信信息、賬號密碼信息、存儲文件信息等四大類。由於Android是開源的,軟體用戶可自行對軟體進行修改、複製及再分發,直接進行信息交換。有些用戶還... ...
  • 本次講述項目背景: 創建Service類,Service下用到dao類。通過在Spring中配置bean,實現在項目啟動時,自動載入這個類 本次只講述配置bean的註意事項,故只給出簡單實例: 創建Service: 在applicationContext.xml下配置bean: 當配置結束後,系統一 ...
  • 註冊工廠是一種很常用的框架書寫方法,它適合於快速創建相同類型的對象。 舉個慄子 比如一個傢具工廠,有沙發、椅子、茶几等等,正常的編程模式是這樣的: 如果想要擴展,就需要繼續定義class,然後new對象。 但是其實沙發的製作與使用時解耦的,使用者並不需要知道沙發、茶几是怎麼製作出來的,只是想使用它而 ...
  • 繼承時實現代碼重用的重要手段,但它並非永遠是完成這項工作的最佳工具,不恰當的使用會導致程式變得很脆弱,當然,在同一個程式員的控制下,使用繼承會變的非常安全。想到了很有名的一句話,你永遠不知道你的用戶是如何使用你寫的程式的,一個程式員繼承另一個程式員寫的類也是同樣的危險。 於方法調用不同的是,繼承打破 ...
  • 引言:正則表達式為高級的文本模式匹配、抽取、與/或文本形式和替換功能提供基礎。在python中,通過標準庫中的re模塊來支持正則表達式 '.'點號,在普通模式,它匹配除換行符外的任意一個字元;如果指定了 DOTALL 標記,匹配包括換行符以內的任意一個字元。 '^'尖尖號,匹配一個字元串的開始,在 ...
  • 安裝 要在PHP程式中使用Redis,首先需要確保 Redis 的PHP驅動程式和 PHP 安裝設置在機器上。可以查看 PHP教程 教你如何在機器上安裝PHP。現在,讓我們來看看一下如何設置 Redis 的PHP驅動程式。 需要從 github 上資料庫: https://github.com/ni ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...