Redis 簡單入門

一、Redis是什麼(數據緩存)

Redis是一個開源的,先進的 key-value 存儲可用於構建高性能,可擴展的 Web 應用程序的解決方案。

二、Redis的優點

異常快速 : Redis是非常快的,每秒可以執行大約110000設置操作,81000個/每秒的讀取操作。
支持豐富的數據類型 : Redis支持最大多數開發人員已經知道如列表,集合,可排序集合,哈希等數據類型。這使得在應用中很容易解決的各種問題,因爲我們知道哪些問題處理使用哪種數據類型更好解決。
操作都是原子的 : 所有 Redis 的操作都是原子,從而確保當兩個客戶同時訪問 Redis 服務器得到的是更新後的值(最新值)。
MultiUtility工具:Redis是一個多功能實用工具,可以在很多如:緩存,消息傳遞隊列中使用(Redis原生支持發佈/訂閱),在應用程序中,如:Web應用程序會話,網站頁面點擊數等任何短暫的數據;

三、安裝與啓動

安裝步驟
wget http://download.redis.io/releases/redis-3.2.6.tar.gz
tar xzf redis-3.2.6.tar.gz
cd redis-3.2.6
make

mkdir /usr/local/redis
cp redis.conf src/redis-server src/redis-cli /usr/local/redis

./redis-server #啓動服務
./redis-cli #客戶端

設置後臺啓動服務
redis.conf
daemonize yes —yes 默認後臺啓動,no 默認前臺啓動
./redis-server redis.conf 使用配置文件後臺啓動
databases 16 —默認16個數據庫(0-15)

四、Key的使用

不能使用”\n”或空格,其他大部分字符都可以組成key,長度不限制
可以自己定義key的格式,如:object-type:id:field
key的長度不要太長,佔內存,查詢慢;也不要太短,可讀性差

key鍵操作

exists key                      #測試指定key是否存在
del key1 key2 ... keyn          #刪除給定key
type key                        #返回給定key類型
keys pattern                    #返回匹配指定模式的所有key
rename oldkey newkey            #改名字
dbsize                          #返回當前數據庫的key數量
expire key seconds              #設置key的有效期
ttl key                         #獲取key剩餘有效期秒數
select db-index                 #選擇數據庫(0-15)
move key db-index               #將指定key從當前數據庫移動到指定數據庫中
flushdb                         #刪除當前數據庫中所有key
flushall                        #刪除所有數據庫中所有key

五、redis數據結構

string

string是redis最基本的類型
redis的string可以包含任何數據,包括jpg圖片或序列化對象
單個value值最大上限1G
如果只是用string,redis可以被看做加上持久化特性的memcache

string類型操作

set key value                       #設置key對應的值爲string類型的value
mset key1 value1 ... keyn valuen    #一次設置多個key的值
mget key1 key2 ... keyn             #一次獲取多個key的值
incr key                            #對key的值進行加加操作,返回新的值;可以對新key(創建key,然後加1,值爲1)也可以是已有的key(key的信息值必須爲整型)
decr key                            #同上,但是進行減減操作(可以使新key也可以是已有的key)
incrby key integer                  #同incr,加指定值
decrby key integer                  #同decr,減指定值
append key value                    #給指定key的字符串值追加value
substr key start end                #返回截取過的key的字符串值

List

list其實是一個雙向鏈表,通過push、pop操作從鏈表頭部或尾部添加刪除元素,所以可以用作棧或隊列

list類型操作

lpush key string            #在key對應list的頭部添加字符串元素
rpop key                    #從list的尾部刪除元素,並返回刪除元素
lrange key start end        #獲取list從start到end的元素,key不存在返回0(開始結尾都包含)
llen key                    #對應list的長度,key不存在返回0,key對應類型不是list,則返回錯誤
rpush key string            #同上,從尾部添加
lpop key                    #從list頭部刪除信息,並返回刪除元素
ltrim key start end         #截取list,保留指定區間元素(開始結尾都包含)

Set

string類型的無序集合,最大可以包含(2的32次方減1)個元素
除了基本的添加刪除之外,還包含集合的取並集(union),交集(intersection),差集(difference),通過這些操作可以很容易的實現sns的推薦好友功能。
注:每個集合中的元素不能重複

set集合操作

sadd key member [member]    #添加string元素到對應key集合中,成功返回1;如果元素已經在集合中,返回0
srem key member [member]    #從key對應集合中刪除給定元素,成功返回1
smove p1 p2 member          #從p1對應set中移除給定元素,並添加到p2對應set中
scard key                   #返回集合元素個數
sismember key member        #判斷集合中是否存在指定元素
sinter key1 key2 ... keyn   #返回所有給定key的集合的交集
sunion key1 key2 ... keyn   #返回所有給定key的集合的並集
sdiff key1 key2 ... keyn    #返回所有給定key的集合的差集
smembers key                #返回集合中所有元素,結果是無序的

SortSet

和set一樣,也是string類型的集合,沒有重複元素;不同的每個元素都有一個權,通過權值可以獲取集合中的元素。適用於獲取熱門帖子訪問量等

SortSet集合操作

zadd key score member               #添加到元素到集合,元素在集合中存在則更新score,添加成功返回1
zrem key member                     #刪除集合中指定元素,返回1表示成功;不存在則返回0
zincrby key incr member             #按照incr幅度增加member的score值,返回score值
zrank key member                    #返回指定元素在集合中的排名(下標),集合中的元素是按score從小到大排序的
zrevrank key member                 #同上,元素按score從大到小排序
zrange key start end [withscores]   #類似lrange,從集合中取出指定區間的元素,返回的是有序結果
zrevrange key start end [withscores]#同上,返回結果按score逆序
zcard key                           #返回集合中元素個數
zscore key element                  #返回指定元素的score
zremrangebyrank key min max         #刪除集合中在給定區間的元素,權值由小到大排序

六、持久化

Redis爲了內部數據的安全考慮,會把本身的數據以文件的形式保存到硬盤中一份,在服務器重啓之後自動把硬盤的數據恢復到內存(redis)中。數據保存到文件中的過程被稱爲“持久化”過程

一小時發起一次快照持久化,中間發起精細持久化(頻率達到秒級)

snap shotting快照持久化

該持久化默認開啓,一次性把redis中全部數據保存一份寫入硬盤,如果數據非常多(10G-20G)就不適合頻繁該持久化操作
快照持久化文件在本地備份文件dump.rdb

在文件redis.conf中設置快照持久化頻率(數據修改的頻率高,備份的頻率也高;修改的頻率低,備份的頻率也低)

save 900 1          #900s 超過1個key修改發起一次快照保存
save 300 10         #300s 超過10個key修改發起一次快照保存
save 60 10000       #60s  超過10000個key修改發起一次快照保存
dbfilename dump.rdb #配置快照持久化文件名字
dir ./              #配置快照持久化位置

手動發起快照持久化

./redis-cli -h 127.0.0.1 -p 6379 bgsave         #發起對應ip快照持久化
./redis-cli bgsave                              #發起本地快照持久化
./redis-cli lastsave                            #返回上次成功保存到磁盤的unix時間戳
redis 127.0.0.1:6379> SHUTDOWN [NOSAVE] [SAVE]  #同步不保存或保存數據並關閉redis服務器

append only file(AOF持久化)

本質:把用戶的每個“寫”(增刪改)指令備份到文件中,還原數據時就是執行具體的寫指令
在文件redis.conf中設置開啓AOF持久化,會清空redis中所有數據

appendonly yes                      #開啓AOF持久化
appendfilename "appendonly.aof"     #配置AOF持久化文件名字
dir ./                              #配置AOF持久化位置
appendfsync everysec                #aof持久化追加備份頻率everysec(每秒持久化一次)/always(來一個追加一次)/no(服務器如果空閒就坐aof持久化)

爲aof持久化做優化處理

./redis-cli bgrewriteaof            #啓動優化壓縮處理(例如多個incr num優化成一個set num)

七、主從模式

爲了降低每個redis服務器的負載,可以多設置幾個,並設置主從模式
一個服務器負責“寫”(增刪改)數據,其他服務器負載“讀”數據;主服務器會總動將數據同步給從服務器

在redis.conf中配置(從服務器默認禁止寫的操作)

slaveof <masterip> <masterport>
發佈了60 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章