21.9 redis介紹;21.10 redis安裝;21.11 redis持久化;

21.9 redis介紹

1. Redis和Memcached類似,也屬於k-v數據存儲

2. Redis官網redis.io, 當前最新穩定版4.0.1

3. 支持更多value類型,除了和string外,還支持hash、lists(鏈表)、sets(集合)和sorted sets(有序集合)

4. redis使用了兩種文件格式:全量數據(RDB)和增量請求(aof)。全量數據格式是把內存中的數據寫入磁盤,便於下次讀取文件進行加載。增量請求文件則是把內存中的數據序列化爲操作請求,用於讀取文件進行replay得到數據,這種類似於mysql binlog。

5. redis的存儲分爲內存存儲、磁盤存儲和log文件三部分


redis安裝

下載最新穩定版


 

1.進入
cd /usr/local/src/
2.下載
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
3.切換到目錄
cd redis-4.0.1
4.編譯、安裝
make && make install
5.拷貝redis.conf到/etc/下
cp redis.conf /etc/redis.conf
6.編輯 etc/redis.conf
vim /etc/redis.conf // 修改如下配置
更改1 daemonize yes
更改2 logfile "/var/log/redis.log"
更改3 dir /data/redis 
更改4 appendonly yes
創建
7.mkdir /data/redis_data
執行內核參數
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
8.編輯/etc/rc.local
,把內核參數加入,使其開機啓動就生效
vim /etc/rc.local
添加內容:
sysctl vm.overcommit_memory=1
echo never > /sys/kernel/mm/transparent_hugepage/enabled
9.啓動
redis-server /etc/redis.conf

10. 搜索是否啓動?

ps aux |grep redis


21.11 redis持久化

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

2. RDB,簡而言之,就是在不同的時間點,將redis存儲的數據生成快照並存儲到磁盤等介質上。

3. AOF,則是換了一個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啓動時,只要把這些寫指令從前到後再重複執行一遍,就可以實現數據恢復了。

4. 其實RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啓的話,則會優先採用AOF方式來進行數據恢復,這是因爲AOF方式的數據恢復完整度更高。

5. 如果你沒有數據持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis將變成一個純內存數據庫,就像memcache一樣。

21.12 redis數據類型

Redis數據類型-string

string爲最簡單的類型,與Memcached一樣的類型,一個key對應一個value,其支持的操作與Memcached的操作類似,它的功能更豐富。設置可以存二進制的對象。

示例:

1. 連接進入redis命令行,設定mykey值

[root@aminglinux-149 redis-4.0.1]# redis-cli

127.0.0.1:6379> set mykey "123"

OK

2. 獲取mykey值

[root@aminglinux-149 redis-4.0.1]# redis-cli

127.0.0.1:6379> get mykey

"123"

3. 同時設定多個k值

[root@aminglinux-149 redis-4.0.1]# redis-cli

127.0.0.1:6379> mset k1 "1" k2 "2" k3 "c"

OK

127

4. 同時獲取多個k值

[root@aminglinux-149 redis-4.0.1]# redis-cli

127.0.0.1:6379> mget k1 k2 k3 mykey

1) "1"

2) "2"

3) "c"

4) "123"

Redis數據類型-list

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

 使用 list 結構,我們可以輕鬆地實現最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一個應用就是消息隊列,可以利用 list 的 push操作,將任務存在 list 中,然後工作線程再用pop操作將任務取出進行執行。

示例:

Redis數據類型-list

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

 使用 list 結構,我們可以輕鬆地實現最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一個應用就是消息隊列,可以利用 list 的 push操作,將任務存在 list 中,然後工作線程再用pop操作將任務取出進行執行。

示例:

Redis數據類型-list

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

 使用 list 結構,我們可以輕鬆地實現最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一個應用就是消息隊列,可以利用 list 的 push操作,將任務存在 list 中,然後工作線程再用pop操作將任務取出進行執行。

示例:

 # redis-cli 

 #lpush作用——定義kv

127.0.0.1:6379
>
 LPUSH list1 111

(
integer
)
 1

127.0.0.1:6379
>
 LPUSH list1 222

(
integer
)
 2

127.0.0.1:6379
>
 LPUSH list1 333

(
integer
)
 3

#LRANGE查值,0 -1表示倒序

127.0.0.1:6379
>
 LRANGE list1 0 -1

1
)
 
"333"

2
)
 
"222"

3
)
 
"111"

#LPOP取值,取值後,list會缺少被取出的值

127.0.0.1:6379
>
 LPOP list1

"333"

127.0.0.1:6379
>
 LRANGE list1 0 -1

1
)
 
"222"

2
)
 
"111"

Redis數據類型-set 

 set是集合,和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交併差等操作。操作中key理解爲集合的名字。比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。因爲 Redis 非常人性化的爲集合提供了求交集、並集、差集等操作,那麼就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。

 set示例

#SADD

127.0.0.1:6379
>
 SADD set1 1

(
integer
)
 1

127.0.0.1:6379
>
 SADD set1 2

(
integer
)
 1

127.0.0.1:6379
>
 SADD set1 3

(
integer
)
 1

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 set2 2

(
integer
)
 1

127.0.0.1:6379
>
 SADD set2 3

(
integer
)
 1

127.0.0.1:6379
>
 SADD set2 4

(
integer
)
 1

127.0.0.1:6379
>
 SADD set2 a

(
integer
)
 1

127.0.0.1:6379
>
 SADD set2 b

(
integer
)
 1

#SMEMBERS 查key值

127.0.0.1:6379
>
 SMEMBERS set1

1
)
 
"1"

2
)
 
"a"

3
)
 
"3"

4
)
 
"2"

5
)
 
"b"

#SMEMBERS 查key值

127.0.0.1:6379
>
 SMEMBERS set2

1
)
 
"a"

2
)
 
"4"

3
)
 
"3"

4
)
 
"2"

5
)
 
"b"

#SINTER 求交集

127.0.0.1:6379
>
 SINTER set1 set2

1
)
 
"a"

2
)
 
"3"

3
)
 
"2"

4
)
 
"b"

#SUNION 去重,並集

127.0.0.1:6379
>
 SUNION set1 set2

1
)
 
"1"

2
)
 
"a"

3
)
 
"2"

4
)
 
"b"

5
)
 
"4"

6
)
 
"3"

#SDIFF 求差集

127.0.0.1:6379
>
 SDIFF set1 set2

1
)
 
"1"

#SREM 刪除元素

127.0.0.1:6379
>
 SREM set1 1

(
integer
)
 1

127.0.0.1:6379
>
 SMEMBERS set1

1
)
 
"a"

2
)
 
"3"

3
)
 
"2"

4
)
 
"b"

解釋:

127.0.0.1:6379> SINTER set1 set2 //交集,相同的交集一起

127.0.0.1:6379> SUNION set1 set2 //並集,set1,set2去重合並

127.0.0.1:6379> SDIFF set1 set2 //差集,不同的元素

127.0.0.1:6379> SREM set1 c //刪除元素

127.0.0.1:6379> SADD set2 a 2  b


Redis數據類型-sort set 

sorted set是有序集合,它比set多了一個權重參數score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學成績的 Sorted Sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。

127.0.0.1:6379>ZADD set3 10 a

(
integer
)
 1
127.0.0.1:6379
>ZADD set3 20 "a-2"

(
integer
)
 1

127.0.0.1:6379
>ZADD set3 30 b
(
integer
)
 1

127.0.0.1:6379
>ZADD set3 40 b-2
(
integer
)
 1

#順序

127.0.0.1:6379
>ZRANGE set3 0 -1
1
)
 
"a"

2
)
 
"a-2"

3
)
 
"b"

4
)
 
"b-2"

#倒序

127.0.0.1:6379
>ZREVRANGE set3 0 -1

1
)
 
"b-2"

2
)
 
"b"

3
)
 
"a-2"

4
)
 
"a"

排序的時候,score值不會被顯示出來的


Redis數據類型-hash 

在 Memcached 中,我們經常將一些結構化的信息打包成 hashmap,在客戶端序列化後存儲爲一個字符串的值(一般是 JSON 格式),比如用戶的暱稱、年齡、性別、積分等。 

 示例

 格式:

 #HSET key value(多個元素)

127.0.0.1:6379
>HSET hash1 name kevin

(
integer
)
 1

127.0.0.1:6379
>HSET hash1 age 26

(
integer
)
 1

127.0.0.1:6379
>HSET hash1 job IT

(
integer
)
 1

#HGET key value

127.0.0.1:6379
>HGET hash1 name

"kevin"

127.0.0.1:6379
>HGET hash1 job

"IT"

127.0.0.1:6379
>HGET hash1 age

"26"

#HGETALL 獲取全部hash value

127.0.0.1:6379
>HGETALL hash1

1)"name"

2)"kevin"

3)"age"

4)"26"

5)"job"

6)"IT"


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章