一篇文章教你學會Redis基礎知識

一。前期儲備知識

1.什麼是NOSql

因爲Redis是歸類爲NoSql的,所以我們在瞭解Redis前應該先了解一下什麼是NoSql

NoSQL,泛指非關係型的數據庫。隨着互聯網web2.0網站的興起,傳統的關係數據庫在處理web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,出現了很多難以克服的問題,而非關係型的數據庫則由於其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。–引自百度百科

NoSql分類:

類型 代表
鍵值對數據庫 Redis,Memcache
列存儲數據庫 Hbase,Cassandra
文檔型數據庫 MongoDB,CouchDB
圖形數據庫 Neo4J,FlockDB
2.什麼是分佈式緩存

分佈式緩存:是一種在分佈式計算領域爲降低數據庫查詢壓力,提升讀取速度性能,基於內存的跨服務器緩存

二。什麼是Redis

Redis是一種NoSql數據庫,是一種分佈式緩存中間件,數據是以一種key-value的形式進行存儲,類似於map形式,提供海量數據訪問存儲,數據存儲在內存當中,讀取更快。總的來說Redis是一種開源的,可以通過水平擴展形成一個集羣的分佈式非關係型性能非常高的緩存中間件

三。技術選型

1.爲什麼要使用緩存中間件

例如雙十一時有大量的請求進來,如果直接去訪問數據庫對數據庫的壓力太大了,根據二八法則,查詢的請求會遠遠多於購買的請求,也就是說查詢的操作要多於修改的操作,這個時候我們就可以在數據庫前面加一個Redis緩存,使得請求不用直接去訪問數據庫而是去訪問緩存,這樣就大大的提高了系統的性能。
舉例來說:我們去飯店吃飯,如果點每一道菜前都需要服務員去後廚確認一下材料夠不夠的話,這樣效率就很會特別低,但是如果有一個記事本,在每天採購的時候就把材料記在上面,然後每點一次菜把材料減少,這樣服務員就不用每次都去後廚去詢問了,這樣效率就提高了。這個記事本就相當於緩存中間件

2.緩存方案對比:Ehcache: VS Memcache VS Redis
  • Ehcache:

EhCache 是一個純Java的進程內緩存框架,具有快速、精幹等特點,是Hibernate中默認的CacheProvider。

優點:基於JAVA開發,基於JVM緩存,簡單,輕巧方便
缺點:集羣,分佈式不支持緩存共享
適合於單應用場景

  • Memcache:

memcache是一套分佈式的高速緩存系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用以提升網站的訪問速度,尤其對於一些大型的、需要頻繁訪問數據庫的網站訪問速度提升效果十分顯著 [1] 。這是一套開放源代碼軟件,以BSD license授權發佈。

優點:簡單的key-value存儲,內存使用率比較高,多核處理多線程
缺點:無法容災,無法持久化,數據結構單一
適用於對數據穩定性要求不高,最求高性能的環境

  • Redis:

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。

優點:豐富的數據結構,可以持久化,支持集羣,內存數據庫
缺點:單線程,單核
適用於:存在緩存共享,分佈式部署,緩存內容龐大的場景

四。Linux下的Nginx的安裝

  1. 下載官網:https://redis.io/download
    選擇下載穩定版本,不穩定版本可以嚐鮮,但是不推薦在生產使用。上傳至linux
    在這裏插入圖片描述
  2. 安裝 Redis解壓redis:
    tar -zxvf redis-5.0.5.tar.gz
    得到:在這裏插入圖片描述
  3. 安裝gcc編譯環境,如果已經安裝過了,那麼就是 nothing to do
    yum install gcc-c++
  4. 進入到 redis-5.0.5 目錄,進行安裝:
    make && make install
  5. 執行完畢後安裝成功配置redis,cd utils在utils下,拷貝redis_init_script到/etc/init.d目錄,目的要把redis作爲開機自啓動
    cp redis_init_script /etc/init.d
  6. 創建 /usr/local/redis,用於存放配置文件
    mkdir /usr/local/redis
    在這裏插入圖片描述
  7. 拷貝redis配置文件:
    拷貝到 /usr/local/redis 下
    cp redis.conf /usr/local/redis/
  8. 修改redis.conf這個核心配置文件修改
    daemonize no -> daemonize yes,目的是爲了讓redis啓動在linux後臺運行
    在這裏插入圖片描述
    9.修改redis的工作目錄:在這裏插入圖片描述

建議修改爲: /usr/local/redis/working,名稱隨意,並且如果要是沒有這個文件夾,記得創建
10.修改如下內容,綁定IP改爲 0.0.0.0 ,代表可以讓遠程連接,不受ip限制
在這裏插入圖片描述
9. 最關鍵的是密碼,默認是沒有的,一定要設置

在這裏插入圖片描述
10. 進入/etc/init.d/修改 redis_init_script 文件中的redis核心配置文件爲如下:在這裏插入圖片描述
並且修改redis核心配置文件名稱爲:6379.conf
11. 爲redis啓動腳本添加執行權限,隨後運行啓動redis:
chmod 777 redis_init_scrip
./redis_init_scrip start
12.檢查redis進程:
在這裏插入圖片描述
到此redis安裝並且啓動成功!
13. 設置redis開機自啓動,修改 redis_init_script,添加如下內容
#chkconfig: 22345 10 90
#description: Start and Stop redis
如圖所示:

#chkconfig: 22345 10 90
#description: Start and Stop redis

在這裏插入圖片描述
14. 隨後執行如下操作:chkconfig redis_init_script on
重啓redis,再看進程:在這裏插入圖片描述

五。Redis命令行客戶端的基本操作

redis-cli -a password shutdown:關閉redis
./redis_init_script stop:關閉redis
redis-cli:進入到redis客戶端
auth pwd:輸入密碼
set key value:設置緩存
get key:獲得緩存
del key:刪除緩存
redis-cli -a password ping:查看是否存活

六。Redis五種常見數據類型

1. String

string: 最簡單的字符串類型鍵值對緩存,也是最基本的

key相關

keys *:查看所有的key (不建議在生產上使用,有性能影響)
type key:key的類型

string類型

get/set/del:查詢/設置/刪除
set rekey data:設置已經存在的key,會覆蓋
setnx rekey data:設置已經存在的key,不會覆蓋
set key value ex time:設置帶過期時間的數據
expire key:設置過期時間
ttl:查看剩餘時間,-1永不過期,-2過期
append key:合併字符串
strlen key:字符串長度
incr key:累加1
decr key:類減1
incrby key num:累加給定數值
decrby key num:累減給定數值
getrange key start end:截取數據,end=-1 代表到最後
setrange key start newdata:從start位置開始替換數據
mset:連續設值
mget:連續取值
msetnx:連續設置,如果存在則不設置

其他

select index:切換數據庫,總共默認16個
flushdb:刪除當前下邊db中的數據
flushall:刪除所有db中的數據

2.hash

hash:類似map,存儲結構化數據結構,比如存儲一個對象(不能有嵌套對象)

使用

hset key property value
-> hset user name abc
-> 創建一個user對象,這個對象中包含name屬性,name值爲abc
hget user name:獲得用戶對象中name的值
hmset:設置對象中的多個鍵值對
-> hset user age 18 phone 139123123
hmsetnx:設置對象中的多個鍵值對,存在則不添加
-> hset user age 18 phone 139123123
hmget:獲得對象中的多個屬性
-> hmget user age phone
hgetall user:獲得整個對象的內容
hincrby user age 2:累加屬性
hincrbyfloat user age 2.2:累加屬性
hlen user:有多少個屬性
hexists user age:判斷屬性是否存在
hkeys user:獲得所有屬性
hvals user:獲得所有值
hdel user:刪除對象(要先刪除裏面的對象)

3.list

list:列表,[a, b, c, d, …]

使用

lpush userList 1 2 3 4 5:構建一個list,從左邊開始存入數據
rpush userList 1 2 3 4 5:構建一個list,從右邊開始存入數據
lrange list start end:獲得數據
lpop:從左側開始拿出一個數據
rpop:從右側開始拿出一個數據
llen list:list長度
lindex list index:獲取list下標的值
lset list index value:把某個下標的值替換
linsert list before/after value:插入一個新的值
lrem list num value:刪除幾個相同數據
ltrim list start end:截取值,替換原來的list

4.set

set:集合,自動去重

使用

sadd set duck pig cow sheep pig pig 創建一個set
SMEMBERS set 查看set
SCARD set查看值的個數
SISMEMBER set pig 判斷值是否存在
srem set duck 追加值
spop set 隨機移除值,後面加數字就是一次移除幾個
SRANDMEMBER set 隨機獲取值,後面加數字就是一次獲取幾個
SMOVE set1 set2 7 從set1中把7這個值移動到set2裏
sdiff set1 set2 set1和set2的差集
SINTER set1 set2 set1和set2的交集
SUNION set1 set2set1和set2的並集

5.zset

zset:排序的set,可以去重可以排序,比如可以根據用戶積分做排名,積分作爲set的一個數值,根據數值可以做排序。set中的每一個memeber都帶有一個分數

zadd zset 10 value1 20 value2 30 value3:設置member和對應的分數
zrange zset 0 -1:查看所有zset中的內容
zrange zset 0 -1 withscores:帶有分數
zrank zset value:獲得對應的下標
zscore zset value:獲得對應的分數
zcard zset:統計個數
zcount zset 分數1 分數2:統計個數
zrangebyscore zset 分數1 分數2:查詢分數之間的member(包含分數1 分數2)
zrangebyscore zset (分數1 (分數2:查詢分數之間的member(不包含分數1 和 分數2)
zrangebyscore zset 分數1 分數2 limit start end:查詢分數之間的member(包含分數1 分數2),獲得的結果集再次根據下標區間做查詢
zrem zset value:刪除member
Redis在線手冊

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