推薦(免費):redis
文章目錄
- 一、redis是什么
- 二、Redis能干什么
- 三、Redis下載與安裝部署
- 四、Redis的幾個小知識
一、Redis是什么
Redis:REmote DIctionary Server(遠程字典服務器)
Redis是完全開源免費的,用c語言編寫的,遵守BSD協議的一個高性能的(key/value)分布式內存數據庫,也是基于內存運行并支持持久化的nosql數據庫,是當前最熱門的NoSql數據庫之一,也被人們稱為數據結構服務器。同時,Redis也是一個簡單的、高效的、分布式的、基于內存的緩存工具。架構好服務器后,通過網絡連接(類似數據庫),提供Key-Value式緩存服務。
Redis有以下幾個優勢:
- 1.性能極高 Redis讀的速度是11萬次/s,寫的速度是8萬次/秒。
- 2.豐富的數據類型 Redis支持的類型有String、Hash、List、Set以及Ordered Set數據庫類型。
- 3.原子性 Redis所有操作都是原子性的,通過MULTI和EXEC指令包起來。
- 4.豐富的讀寫 Redis支持publish/subscribe、通知、key過期等特性。
- 5.高速讀寫 redis使用自己實現的分離器,代碼量很短,沒有使用lock(mysql),因此效率非常高。
Redis也有以下幾個劣勢:
- 1.持久化 Redis直接將數據存儲在內存中,如果要將數據保存到磁盤上,第一種方法是使用①定時快照(snapshot):每隔一段時間將整個數據庫寫到磁盤上,每次均是寫全部數據,但是代價非常高;第二種方法是②基于語句追加(aof):只追蹤變化的數據,但是追加的log可能過大,同時所有的操作均重新執行一遍,恢復速度慢。
- 2.耗內存,占用內存過高。
二、Redis能干什么
企業開發中,可以將Redis作為數據庫、緩存、熱點數據(經常被查詢但是不被修改和刪除的數據)、消息中間件等大部分功能。
Redis的常用場景實例如下:
-
緩存
如今緩存幾乎是所有中大型網站都在用的必殺技,合理的利用緩存不僅能夠提升網站的訪問速度,還能大大降低數據庫的壓力。Redis提供了鍵過期的功能,也提供了靈活的鍵淘汰策略。 -
排行榜
如淘寶的月度銷量榜單、商品按時間的上新排行榜等。Redis提供的有序集合數據類構能實現各種復雜的排行榜應用。 -
計數器
如電商網站商品的瀏覽量、視頻網站視頻的播放數等。為了保證數據實時效,每次瀏覽都得給+1,并發量高時如果每次都請求數據庫操作無疑是種挑戰和壓力。Redis提供的incr命令來實現計數器功能,內存操作,性能非常好,非常適用于這些計數場景。 -
分布式會話
集群模式下,在應用不多的情況下一般使用容器自帶的Session復制功能就能滿足,在應用增多相對復雜的系統中,一般都會搭建以Redis等內存數據庫為中心的session服務,session不再由容器管理,而是由session服務及內存數據庫管理。 -
分布式鎖
分布式技術帶來的技術挑戰是對同一個資源的并發訪問,如全局ID、減庫存、秒殺等場景,并發量不大的場景可以使用數據庫的悲觀鎖、樂觀鎖來實現,但在并發量高的場合中,利用數據庫鎖來控制資源的并發訪問是不太理想的,大大影響了數據庫的性能。可以利用Redis的setnx功能來編寫分布式的鎖,如果設置返回1說明獲取鎖成功,否則獲取鎖失敗,實際應用中要考慮的細節要更多。 -
社交網絡
點贊、踩、關注/被關注、共同好友等是社交網站的基本功能,社交網站的訪問量通常來說比較大,而且傳統的關系數據庫類型不適合存儲這種類型的數據,Redis提供的哈希、集合等數據結構能很方便的的實現這些功能。 -
最新列表
Redis列表結構,LPUSH可以在列表頭部插入一個內容ID作為關鍵字,LTRIM可用來限制列表的數量,這樣列表永遠為N個ID,無需查詢最新的列表,直接根據ID去到對應的內容頁即可。 -
消息系統
消息隊列是大型網站必用中間件,如activemq、rabbitmq、kafka等流行的消息隊列中間件,主要用于業務解耦、流量削峰及異步處理實時性低的業務。Redis提供了發布/訂閱及阻塞隊列功能,能實現一個簡單的消息隊列系統。但是,這個不能和專業的消息中間件相比。
三、Redis下載與安裝部署
Redis英文官網。
Redis中文網站。
由于企業里面做Redis開發,99%都是linux版的運用和安裝,所以本文僅介紹Linux下的安裝與運行,windows下的安裝使用小伙伴們可以自行百度。前往上面的官網點擊Download下載.gz安裝包后,放在Linux下的/opt目錄 (我這里安裝的是Redis的6.0.5版本)。
- 解壓命令為:tar -zxvf redis-6.0.5.tar.gz
上述命令只是解壓了Redis,如果想要安裝Redis,需要Linux系統有gcc環境,如果沒有可以使用yum install gcc-c++安裝,然后使用gcc -v查看版本。
如果Linux環境已經有了gcc環境,直接使用下面的命令進行安裝:
- 安裝命令為:make install
安裝好默認是像tomcat那樣不能開機自啟的,可以修改 redis.conf 文件中的 daemonize 屬性為yes。
- 開啟redis服務:redis-server /myredis/redis.conf(此處為修改屬性后的redis配置文件)
查看后臺Redis服務是否啟動:
- ps -ef|grep redis
開啟Redis服務:
- redis-cli -p 6379
正常關閉,數據會進行保存
在redis命令行中使用shutdown命令關閉。
非正常關閉,易導致數據丟失
斷電、手動kill掉redis進程等。
幾個其他的redis命令
四、Redis的幾個小知識
Redis是一個單進程,使用單進程模型來處理客戶端的請求。對讀寫等事件的響應是通過對epoll函數的包裝來做到的。Redis的實際處理速度完全依靠主進程的執行效率。
epoll是Linux內核為處理大批量文件描述符而作了改進的epoll,是Linux下多路復用IO接口select/poll的增強版本,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。
-
Redis默認有16個數據庫,下標從零開始,初始默認使用零號庫,可以使用SELECT
命令連接上指定數據庫。 -
dbsize指令可以查看當前數據庫的key的數量,keys *查看所有的key。
-
flushdb:清空當前庫(慎用)
-
Flushall:清空全部庫(慎用)
-
統一密碼管理,16個庫都是同樣密碼,要么都OK要么一個也連接不上。
-
Redis索引都是從零開始
-
Redis默認端口是6379
更多相關免費學習推薦:redis