redis介紹、redis安裝、redis持久化、redis資料型別
一:redis介紹
Redis和Memcached類似,也屬於k-v資料儲存
Redis官網redis.io, 當前最新穩定版4.0.1
支援更多value型別,除了和string外,還支援hash、lists(連結串列)、sets(集合)和sorted sets(有序集合)
redis使用了兩種檔案格式:全量資料(RDB)和增量請求(aof)。全量資料格式是把記憶體中的資料寫入磁碟,便於下次讀取檔案進行載入。增量請求檔案則是把記憶體中的資料序列化為操作請求,用於讀取檔案進行replay得到資料,這種類似於mysql binlog。
redis的儲存分為記憶體儲存、磁碟儲存和log檔案三部分
二:redis安裝
下載最新穩定版
cd /usr/local/src/
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
cd redis-4.0.1
make && make install
cp redis.conf /etc/redis.conf
vim /etc/redis.conf //修改如下配置
daemonize yes
logfile "/var/log/redis.log"
dir /data/redis_data/
appendonly yes
mkdir /data/redis_data
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
redis-server /etc/redis.conf
三:redis持久化
Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)
RDB,簡而言之,就是在不同的時間點,將redis儲存的資料生成快照並存儲到磁碟等介質上。
AOF,則是換了一個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啟動時,只要把這些寫指令從前到後再重複執行一遍,就可以實現資料恢復了。
其實RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先採用AOF方式來進行資料恢復,這是因為AOF方式的資料恢復完整度更高。
如果你沒有資料持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis將變成一個純記憶體資料庫,就像memcache一樣。
Redis持久化相關引數
save 900 1 #表示每15分鐘且至少有1個key改變,就觸發一次持久化
save 300 10 #表示每5分鐘且至少有10個key改變,就觸發一次持久化
save 60 10000 #表示每60秒至少有10000個key改變,就觸發一次持久
save “” #這樣可以禁用rdb持久化
appendonly yes #如果是yes,則開啟aof持久化
appendfilename “appendonly.aof” # 指定aof檔名字
appendfsync everysec #指定fsync()呼叫模式,有三種no(不呼叫fsync),always(每次寫都會呼叫fsync),everysec(每秒鐘呼叫一次fsync)。第一種最快,第二種資料最安全,但效能會差一些,第三種為這種方案,預設為第三種。
四:redis資料型別
Redis資料型別-string
string為最簡單的型別,與Memcached一樣的型別,一個key對應一個value,其支援的操作與Memcached的操作類似,它的功能更豐富。設定可以存二進位制的物件。
示例:
#redis-cli
127.0.0.1:6379> set mykey "aminglinux.com"
OK
127.0.0.1:6379> get mykey
"aminglinux.com"
127.0.0.1:6379> mset key1 1 key2 a key3 c
127.0.0.1:6379> mget key1 key2 key3
1) "1"
2) "a"
3) "c"
Redis資料型別-list
list是一個連結串列結構,主要功能是push、pop、獲取一個範圍的所有值等等。操作中key理解為連結串列的名字。
使用 list 結構,我們可以輕鬆地實現最新訊息排行等功能(比如新浪微博的 TimeLine )。list 的另一個應用就是訊息佇列,可以利用 list 的 push操作,將任務存在 list 中,然後工作執行緒再用pop操作將任務取出進行執行。
示例:
#redis-cli
127.0.0.1:6379> LPUSH list1 "aminglinux"
127.0.0.1:6379> LPUSH list1 "1 2 3"
127.0.0.1:6379> LPUSH list1 "aaa bbb“
127.0.0.1:6379> LRANGE list1 0 -1
1) "aaa bbb"
2) "1 2 3"
3) "aminglinux“
127.0.0.1:6379> LPOP list1
Redis資料型別-set
set是集合,和我們數學中的集合概念相似,對集合的操作有新增刪除元素,有對多個集合求交併差等操作。操作中key理解為集合的名字。比如在微博應用中,可以將一個使用者所有的關注人存在一個集合中,將其所有粉絲存在一個集合。因為 Redis 非常人性化的為集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。
set示例
127.0.0.1:6379> SADD set1 a
127.0.0.1:6379> SADD set1 b
127.0.0.1:6379> SADD set1 c
127.0.0.1:6379> SADD set1 d
127.0.0.1:6379> SMEMBERS set1
1) "d"
2) "b"
3) "a"
4) "c"
127.0.0.1:6379> SREM set1 c//刪除元素
127.0.0.1:6379> SADD set2 a 2 b
127.0.0.1:6379> SINTER set1 set2 //交集
127.0.0.1:6379> SUNION set1 set2 //並集
127.0.0.1:6379> SDIFF set1 set2 //差集
Redis資料型別-sort set
sorted set是有序集合,它比set多了一個權重引數score,使得集合中的元素能夠按 score 進行有序排列,比如一個儲存全班同學成績的 Sorted Sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在資料插入集合的時候,就已經進行了天然的排序。
127.0.0.1:6379> ZADD set3 12 abc
127.0.0.1:6379> ZADD set3 2 "cde 123"
127.0.0.1:6379> ZADD set3 24 "123-aaa"
127.0.0.1:6379> ZADD set3 4 "a123a"
127.0.0.1:6379> ZRANGE set3 0 -1
1) "cde 123"
2) "a123a"
3) "abc"
4) "123-aaa"
倒序
127.0.0.1:6379> ZREVRANGE set3 0 -1
1) "123-aaa"
2) "abc"
3) "a123a"
4) "cde 123"
Redis資料型別-hash
在 Memcached 中,我們經常將一些結構化的資訊打包成 hashmap,在客戶端序列化後儲存為一個字串的值(一般是 JSON 格式),比如使用者的暱稱、年齡、性別、積分等。
示例
127.0.0.1:6379> hset hash1 name aming
127.0.0.1:6379> hget hash1 name
"aming"
127.0.0.1:6379> hset hash1 age 30
127.0.0.1:6379> hget hash1 age
"30"
127.0.0.1:6379> hgetall hash1
1) "name"
2) "aming"
3) "age"
4) "30"