[toc]mysql
cd /usr/local/src/ wget http://download.redis.io/releases/redis-4.0.9.tar.gz tar zxvf redis-4.0.9.tar.gz cd redis-4.0.9 make && make install echo $?
[root@xavi redis-4.0.9]# redis- redis-benchmark redis-check-rdb redis-sentinel redis-check-aof redis-cli redis-server [root@xavi redis-4.0.9]# which redis-cli /usr/local/bin/redis-cli
[root@xavi redis-4.0.9]# cp redis.conf /etc/ vim /etc/redis.conf ------------------------------------------ 此處用來配置監聽IP # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1
建立如上定義的 aof 的目錄linux
mkdir /data/redis
[root@xavi redis-4.0.9]# redis-server /etc/redis.conf // [root@xavi redis-4.0.9]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9433/redis-server 1
[root@xavi redis-4.0.9]# less /var/log/redis.log
有以下兩個報錯:意思是 當你內存比較低的時候會報錯,讓咱們把 vm.overcommit_memory 調節爲 1 (1) WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. (2) echo never > /sys/kernel/mm/transparent_hugepage/enabled
解決方法:redis
[root@xavi redis-4.0.9]# vim /etc/rc.local 添加以下兩行: sysctl vm.overcommit_memory=1 echo never > /sys/kernel/mm/transparent_hugepage/enabled
和Memcached服務同樣,若是關閉RDB和aof數據就會存儲在內存中,當重啓服務或者重啓機器 存儲的數據就會丟失。若是數據很重要,咱們就須要作持久化。算法
[ ] RDB,簡而言之,就是在不一樣的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上。sql
[ ] AOF,則是換了一個角度來實現持久化,那就是將redis執行過的全部寫指令記錄下來,在下次redis從新啓動時,只要把這些寫指令從前到後再重複執行一遍,就能夠實現數據恢復了。數據庫
其實RDB和AOF兩種方式也能夠同時使用,在這種狀況下,若是redis重啓的話,則會優先採用AOF方式來進行數據恢復,這是由於AOF方式的數據恢復完整度更高。vim
redis會把內存中的數據備份到硬盤中,這個取決於:安全
vim /etc/redis.conf 打開redis配置文件app
save 900 1 #表示每15分鐘且至少有1個key改變,就觸發一次持久化 save 300 10 #表示每5分鐘且至少有10個key改變,就觸發一次持久化 save 60 10000 #表示每60秒至少有10000個key改變,就觸發一次持久 save 「」 #這樣能夠禁用rdb持久化
# appendfsync always //一直寫,每次有變動就寫進去 appendfsync everysec //安全高效,每一秒記錄一次,把數據從內存刷新到磁盤中去 # appendfsync no //每隔一段時間,根據系統的算法,Linux系統不按期把內存的數據同步到磁盤上去,根據這個頻率走,容易丟數據
總結:AOF記錄的比RDB更全面less
string爲最簡單的類型,與Memcached同樣的類型,一個key對應一個value,其支持的操做與Memcached的操做相似,它的功能更豐富。設置能夠存二進制的對象。
示例:
[root@xavi redis-4.0.9]# redis-cli 127.0.0.1:6379> set mykey "123" OK 127.0.0.1:6379> get mykey "123" 127.0.0.1:6379> mset k1 1 k2 2 k3 a OK 127.0.0.1:6379> mget k1 mykey 1) "1" 2) "123"
list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的全部值等等。操做中key理解爲鏈表的名字。
127.0.0.1:6379> LPUSH list1 "xavilinux" (integer) 1 127.0.0.1:6379> Lpush list1 "123" (integer) 2 127.0.0.1:6379> LPUSH list1 "aaa bbb" (integer) 3 127.0.0.1:6379> LRANGE list1 0-1 //0-1中間有空格 (error) ERR wrong number of arguments for 'lrange' command 127.0.0.1:6379> LRANGE list1 0 -1 //從0到-1 1) "aaa bbb" 2) "123" 3) "xavilinux"
set是集合,和咱們數學中的集合概念類似,對集合的操做有添加刪除元素,有對多個集合求交併差等操做。操做中key理解爲集合的名字。
好比在微博應用中,能夠將一個用戶全部的關注人存在一個集合中,將其全部粉絲存在一個集合。由於 Redis 很是人性化的爲集合提供了求交集、並集、差集等操做,那麼就能夠很是方便的實現如共同關注、共同喜愛、二度好友等功能,對上面的全部集合操做,你還可使用不一樣的命令選擇將結果返回給客戶端仍是存集到一個新的集合中。
set示例
127.0.0.1:6379> sadd set1 a (integer) 1 127.0.0.1:6379> SADD set1 b (integer) 1 127.0.0.1:6379> sadd set1 c (integer) 1 127.0.0.1:6379> SMEMBERS SET1 (empty list or set) 127.0.0.1:6379> SMEMBERS set1 1) "c" 2) "a" 3) "b" 127.0.0.1:6379> sadd set2 a (integer) 1 127.0.0.1:6379> sadd set2 2 (integer) 1 127.0.0.1:6379> sadd set2 3 (integer) 1 127.0.0.1:6379> sadd set2 c (integer) 1 127.0.0.1:6379> SMEMBERS set2 1) "c" 2) "a" 3) "3" 4) "2" 127.0.0.1:6379> SUNION set1 set2 //求並集 1) "a" 2) "c" 3) "3" 4) "b" 5) "2" 127.0.0.1:6379> sinter set1 set2 //求交集 1) "c" 2) "a" 127.0.0.1:6379> SDIFF set1 set2 //求差集 1) "b" 127.0.0.1:6379> SREM set1 c //刪除某元素 (integer) 1
sorted set是有序集合,它比set多了一個權重參數score,使得集合中的元素可以按 score 進行有序排列,
示例:
127.0.0.1:6379> ZADD set3 12 abc (integer) 1 127.0.0.1:6379> ZADD set3 2 "cde 123" (integer) 1 127.0.0.1:6379> ZADD set3 24 "xavi" (integer) 1 127.0.0.1:6379> ZADD set3 4 "xavilinux" (integer) 1 127.0.0.1:6379> ZRANGE set3 0 -1 1) "cde 123" 2) "xavilinux" 3) "abc" 4) "xavi" 倒敘排列 127.0.0.1:6379> ZREVRANGE set3 0 -1 1) "xavi" 2) "abc" 3) "xavilinux" 4) "cde 123"
在 Memcached 中,咱們常常將一些結構化的信息打包成 hashmap,在客戶端序列化後存儲爲一個字符串的值(通常是 JSON 格式),好比用戶的暱稱、年齡、性別、積分等
127.0.0.1:6379> HSET hash1 name xavi (integer) 1 127.0.0.1:6379> HSET hash1 age 30 (integer) 1 127.0.0.1:6379> HSET hash1 job IT (integer) 1 127.0.0.1:6379> HGET hash1 name "xavi" 127.0.0.1:6379> HGET hash1 job "IT" 127.0.0.1:6379> hgetall hash1 1) "name" 2) "xavi" 3) "age" 4) "30" 5) "job" 6) "IT"