21.9 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的併發量是10W以上,瓶頸在網絡或者內存上面
21.10 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
mysql
21.11 redis持久化
Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)
RDB,簡而言之,就是在不一樣的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上。
AOF,則是換了一個角度來實現持久化,那就是將redis執行過的全部寫指令記錄下來,在下次redis從新啓動時,只要把這些寫指令從前到後再重複執行一遍,就能夠實現數據恢復了。
其實RDB和AOF兩種方式也能夠同時使用,在這種狀況下,若是redis重啓的話,則會優先採用AOF方式來進行數據恢復,這是由於AOF方式的數據恢復完整度更高。
若是你沒有數據持久化的需求,也徹底能夠關閉RDB和AOF方式,這樣的話,redis將變成一個純內存數據庫,就像memcache同樣。linux
21.12 redis數據類型
Redis數據類型-list
list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的全部值等等。操做中key理解爲鏈表的名字。
使用 list 結構,咱們能夠輕鬆地實現最新消息排行等功能(好比新浪微博的 TimeLine )。list 的另外一個應用就是消息隊列,能夠利用 list 的 push操做,將任務存在 list 中,而後工做線程再用pop操做將任務取出進行執行。
示例:redis
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 list1sql
Redis數據類型-set
set是集合,和咱們數學中的集合概念類似,對集合的操做有添加刪除元素,有對多個集合求交併差等操做。操做中key理解爲集合的名字。好比在微博應用中,能夠將一個用戶全部的關注人存在一個集合中,將其全部粉絲存在一個集合。由於 Redis 很是人性化的爲集合提供了求交集、並集、差集等操做,那麼就能夠很是方便的實現如共同關注、共同喜愛、二度好友等功能,對上面的全部集合操做,你還可使用不一樣的命令選擇將結果返回給客戶端仍是存集到一個新的集合中。
set示例
127.0.0.1:6379> SADD set1 a127.0.0.1:6379> SADD set1 b
127.0.0.1:6379> SADD set1 c
127.0.0.1:6379> SADD set1 d127.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 abc127.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"vim
倒序
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 aming127.0.0.1:6379> hget hash1 name"aming"127.0.0.1:6379> hset hash1 age 30127.0.0.1:6379> hget hash1 age "30"
127.0.0.1:6379> hgetall hash11) "name"2) "aming"3) "age"4) "30"
併發