初識Redis(安裝,持久化,數據類型)

[toc]mysql

初識Redis(安裝,持久化,數據類型)

1、Redis介紹:

  • [ ] Redis和Memcached相似,也屬於k-v數據存儲,可是功能和操做性要比Memcached好不少。
  • [ ] Redis官網redis.io, 當前最新穩定版4.0.1 支持更多value類型,除了和string外,還支持hash、lists(鏈表)、sets(集合)和sorted sets(有序集合)
  • [ ] redis使用了兩種文件格式:全量數據(RDB)和增量請求(aof)。
  • [ ] 全量數據格式是把內存中的數據寫入磁盤,便於下次讀取文件進行加載。
  • [ ] 增量請求文件則是把內存中的數據序列化爲操做請求,用於讀取文件進行replay獲得數據,這種相似於mysql binlog。
  • [ ] 爲了節省資源,當咱們手動保存一次全量數據,就能夠刪除當前的全部增量數據了,有些增量數據其實早就過時了,也可按期利用腳本作一些優化。
  • [ ] redis的存儲分爲內存存儲、磁盤存儲和log文件三部分

2、安裝redis

2.1 安裝步驟

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 $?

mark

安裝完成後能夠查看下redis的服務有哪些,並查看一下安裝路徑

[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

3.2 拷貝安裝文件到/etc目錄下:

[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

mark

mark

mark

mark

mark

mark

mark

mark

mark

建立如上定義的 aof 的目錄linux

mkdir /data/redis

2.2 啓動 redis,redis-server /etc/redis.conf安裝默認的conf文件啓動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

2.3 查看日誌:

[root@xavi redis-4.0.9]# less /var/log/redis.log

mark

有以下兩個報錯:意思是 當你內存比較低的時候會報錯,讓咱們把
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

mark

3、Redis 持久化

和Memcached服務同樣,若是關閉RDB和aof數據就會存儲在內存中,當重啓服務或者重啓機器 存儲的數據就會丟失。若是數據很重要,咱們就須要作持久化。算法

3.1 Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)

  • [ ] RDB,簡而言之,就是在不一樣的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上。sql

  • [ ] AOF,則是換了一個角度來實現持久化,那就是將redis執行過的全部寫指令記錄下來,在下次redis從新啓動時,只要把這些寫指令從前到後再重複執行一遍,就能夠實現數據恢復了。數據庫

  • 其實RDB和AOF兩種方式也能夠同時使用,在這種狀況下,若是redis重啓的話,則會優先採用AOF方式來進行數據恢復,這是由於AOF方式的數據恢復完整度更高。vim

  • 若是你沒有數據持久化的需求,也徹底能夠關閉RDB和AOF方式,這樣的話,redis將變成一個純內存數據庫,就像memcache同樣。

3.2 怎麼開啓「持久化」?以及什麼時間

redis會把內存中的數據備份到硬盤中,這個取決於:安全

vim /etc/redis.conf 打開redis配置文件app

mark

save 900 1 #表示每15分鐘且至少有1個key改變,就觸發一次持久化

save 300 10 #表示每5分鐘且至少有10個key改變,就觸發一次持久化

save 60 10000 #表示每60秒至少有10000個key改變,就觸發一次持久

save 「」  #這樣能夠禁用rdb持久化

3.3 如何關閉「持久化」

mark

AOF格式中appendfsync三種形式解析:

mark

# appendfsync always //一直寫,每次有變動就寫進去
appendfsync everysec //安全高效,每一秒記錄一次,把數據從內存刷新到磁盤中去
# appendfsync no //每隔一段時間,根據系統的算法,Linux系統不按期把內存的數據同步到磁盤上去,根據這個頻率走,容易丟數據

總結:AOF記錄的比RDB更全面less

4、 redis數據類型

4.1 Redis數據類型-string

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"

4.2 Redis數據類型-list 鏈表

list是一個鏈表結構,主要功能是push、pop、獲取一個範圍的全部值等等。操做中key理解爲鏈表的名字。

  • 使用 list 結構,咱們能夠輕鬆地實現最新消息排行等功能(好比新浪微博的 TimeLine )。list 的另外一個應用就是消息隊列,能夠利用 list 的 push操做,將任務存在 list 中,而後工做線程再用pop操做將任務取出進行執行。
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"

4.3 Redis數據類型-set 集合

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

4.4 Redis數據類型-sort set 有序集合

sorted set是有序集合,它比set多了一個權重參數score,使得集合中的元素可以按 score 進行有序排列,

  • 好比一個存儲全班同窗成績的 Sorted Sets,其集合 value 能夠是同窗的學號,而 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"

4.5 Redis數據類型-hash 哈希

在 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"
相關文章
相關標籤/搜索