<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Redis的基本使用

      1、NoSQL數據庫基本介紹

      1.1、NoSQL數據庫

      NoSQL(Not Only SQL ),意即“不僅僅是SQL”,泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在處理web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,出現了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,特別是大數據應用難題。

      NoSQL有如下優點:易擴展,NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。無形之間也在架構的層面上帶來了可擴展的能力。大數據量,高性能,NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益于它的無關系性,數據庫的結構簡單。

       

      NoSQL 數據庫特點: 

      • 不遵循SQL標準。
      • 區別于關系數據庫,它們不保證關系數據的ACID特性
      • 遠超于SQL的性能。

       

      NoSQL適用場景:

      • 對數據高并發的讀寫
      • 海量數據的讀寫
      • 對數據高可擴展性的

       

      NoSQL不適用場景:

      • 需要事務支持
      • 基于sql的結構化查詢存儲,處理復雜的關系,需要即席查詢。(用不著sql的和用了sql也不行的情況,請考慮用NoSql

       

      1.2、常見的 NoSQL 數據庫

      Memcache

      Redis

      MongoDB

       

      2、Redis的基本介紹

      Redis是一個開源的、可基于內存亦可持久化的日志型、高性能的鍵值對(Key-Value)存儲數據庫,并提供多種語言的API。Redis 通常被稱為數據結構服務器,因為值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等類型。

       

      Redis 與其他 key - value 緩存產品有以下三個特點:

      • Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
      • Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
      • Redis支持數據的備份,即master-slave模式的數據備份。

       

      2.1、Redis的優勢

      • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
      • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
      • 原子 – Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
      • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

      Redis有著更為復雜的數據結構并且提供對他們的原子性操作,這是一個不同于其他數據庫的進化路徑。Redis的數據類型都是基于基本數據結構的同時對程序員透明,無需進行額外的抽象。Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因為數據量不能大于硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們并不需要進行隨機訪問。

       

      3、Redis安裝和啟動關閉

      3.1、安裝 Redis

      window 版本可參考:https://www.runoob.com/redis/redis-install.html

      下面我們安裝 Linux 版本的 Redis。

      下載地址:https://redis.io/download,下載完成后將 .tar.gz 安裝包上傳到 Linux 系統上,比如我們上傳至 /usr/mysoft 目錄下。

      注意,編譯 Redis 需要C語言編譯器gcc的支持,如果沒有,需要先安裝gcc,我們可以使用 gcc --version 來查看gcc是否安裝:

      如果沒有安裝 gcc 的話,可使用 yum install gcc 命令安裝 gcc。

       

      解壓安裝包,命令:tar -zxvf redis-6.2.6.tar.gz

      進入解壓后目錄,并輸入 make 命令進行編譯:

       如果 gcc 沒有安裝好,編譯可能會報錯:Jemalloc/jemalloc.h:沒有那個文件。此時可以先使用 make distclean 命令來清除臨時文件,然后再執行 make 命令進行再次編譯。

       

      運行 make install 命令安裝 Redis:

      安裝完成后,Redis 默認會安裝在 /usr/local/bin 目錄下,目錄結構如下:

      文件說明:

      • redis-benchmark:性能測試工具,可以在自己本子運行,看看自己本子性能如何
      • redis-check-aof:修復有問題的AOF文件,rdbaof后面講
      • redis-check-dump:修復有問題的dump.rdb文件
      • redis-sentinelRedis集群使用
      • redis-serverRedis服務器啟動命令
      • redis-cli客戶端,操作入口。在啟動 Redis 后,可以使用客戶端來訪問Redis

       

      3.2、啟動Redis

      啟動 Redis 只需進入到 Redis 的安裝目錄,并執行 redis-server 命令即可:

      默認情況下,這里直接執行 Redis-server 啟動的Redis服務,是在前臺直接運行的,也就是說,執行完該命令后,如果把當前窗口關閉掉,則Redis服務也會隨即關閉。所以一般情況下,啟動Redis服務需要從后臺啟動,也就是讓 Redis 可以在后臺運行。

      我們可以先拷貝一個 Redis 配置文件到指定目錄下,比如:cp  /usr/mysoft/redis-6.2.6/redis.conf  /usr/mysoft/redis-6.2.6/myredis/redis.conf。然后編譯新拷貝的配置文件,將 daemonize 由 no 改為 yes。

      再次啟動redis服務,并指定啟動服務配置文件:/usr/local/bin/redis-server /usr/mysoft/redis-6.2.6/myredis/redis.conf:

      由此 Redis 即可運行在后臺,即使關閉運行窗口 Redis 也不會被關閉。

       

      在啟動 Redis 后,我們可以使用客戶端訪問Redis,直接輸入 /usr/local/bin/redis-cli 命令即可啟動客戶端訪問 Redis:

      redis-cli 只是 Redis 的客戶端,如果沒有啟動 Redis 進程的話,啟動 redis-cli 會提示無法連接。

       

       3.3、關閉Redis

      單實例關閉,命令:redis-cli shutdown

      也可以進入終端后再關閉:

       

      多實例關閉,指定端口關閉,命令:redis-cli -p 6379 shutdown

       

      4、Redis相關知識

      4.1、端口號

      Redis  的默認端口號為 6379。(6379在是手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字)

       

      4.2、Redis的單線程+多路IO復用技術

      Redis是單線程+多路IO復用技術。這里“多路”指的是多個網絡連接,“復用”指的是復用同一個線程,采用多路 I/O 復用技術可以讓單個線程高效的處理多個連接請求(盡量減少網絡 IO 的時間消耗)。

       

      多路復用:Redis 會使用一個線程來檢查多個文件描述符(socket)的就緒狀態,如果有一個文件描述符(socket)就緒,就返回,否則 Redis 會把當前線程阻塞掉。在得到就緒狀態后進行真正的操作時可以在同一個線程里執行,也可以啟動新線程去執行(線程池),本質上是沒有阻塞的。

       

      多路I/O復用模型是利用 select、poll(輪詢)、epoll 可以同時監察多個流的 I/O 事件的能力,在空閑的時候(即沒有IO事件時),會把當前線程阻塞掉。當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,此時程序會輪詢一遍所有的流(epoll 是只輪詢那些真正發出了事件的流),并且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

      采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗;

      這里我們一直在強調的單線程,只是 Redis 在處理我們的網絡請求(即對 Redis 的數據庫連接)的時候只有一個線程來處理,一個正式的Redis Server運行的時候肯定是不止一個線程的,這里需要大家明確的注意一下!例如Redis進行持久化的時候會以子進程或者子線程的方式執行。

       

      4.3、Redis操作的原子性

      Redis的所有單個操作都是原子性的,所謂原子操作是指不會被線程調度機制打斷的操作,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。

      這種操作一旦開始,就一直運行到結束,中間不會有任何 context switch (切換到另一個線程)。

      1)在單線程中, 能夠在單條指令中完成的操作都可以認為是"原子操作",因為中斷只能發生于指令之間。

      2)在多線程中,不能被其它進程(線程)打斷的操作就叫原子操作。

      Redis單命令的原子性主要得益于Redis的單線程。

       

      5、Redis的數據庫

       

      5.1、Redis的多個數據庫

      Redis 默認提供了 16 個數據庫,每個數據庫都有一個 id, 從 0 開始,0~15, 且默認使用的是0號庫。

      每個數據庫的數據是隔離的不能共享。我們可以通過修改 redis 的配置文件的 databases 進行修改數據庫的數量,并且該數量無上限。Redis是一個字典結構的存儲服務器,而實際上一個Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。這與我們熟知的在一個關系數據庫實例中可以創建多個數據庫類似,所以可以將其中的每個字典都理解成一個獨立的數據庫。

      客戶端與Redis建立連接后會自動選擇 0 號數據庫,不過可以隨時使用 select <dbid> 命令更換數據庫。

      比如要選擇1號數據庫:

       

      Redis 多個數據庫的特點:

      • Redis 不支持自定義數據庫的名字,每個數據庫都以編號命名,開發者必須自己記錄哪些數據庫存儲了哪些數據。
      • Redis 不支持為每個數據庫設置不同的訪問密碼,統一密碼管理,所有庫同樣密碼。所以一個客戶端要么可以訪問全部數據庫,要么連一個數據庫也沒有權限訪問。
      • 多個數據庫之間并不是完全隔離的,比如 FLUSHALL 命令可以清空一個Redis實例中所有數據庫中的數據。

      綜上所述,這些數據庫更像是一種命名空間,而不適宜存儲不同應用程序的數據。比如可以使用0號數據庫存儲某個應用生產環境中的數據,使用1號數據庫存儲測試環境中的數據,但不適宜使用0號數據庫存儲A應用的數據而使用1號數據庫B應用的數據,不同的應用應該使用不同的Redis實例存儲數據。由于Redis非常輕量級,一個空Redis實例占用的內存只有1M左右,所以不用擔心多個Redis實例會額外占用很多內存。

       

      5.2、數據庫相關命令

      數據庫相關常用命令如下:

      • select 數據庫 id:根據id切換數據庫
      • dbsize:查看當前數據庫的key的數量
      • flushdb:清空當前庫的數據
      • flushall:將全部數據庫的數據都清空

       

      如何查看當前連接的是幾號數據庫?默認選擇的是 0 號數據庫,當通過 select 命令切換數據庫后,會在命令行后面顯示 [],[] 括號里面的就是當前連接的數據庫號,默認。如下:

       

      6、數據庫的鍵

      6.1、鍵的過期時間

      redis 的鍵默認是永不過期的。一般情況是這樣,當你配置中開啟了超出最大內存限制就寫磁盤的話,那么這些沒有設置過期時間的key可能會被寫到磁盤上。如果沒設置,那么redis將使用LRU機制,將內存中的老數據刪除,并寫入新數據。

      當然也可以為鍵設置過期時間,“expire key 時間” 命令用于設置key 的過期時間,key 過期后將不再可用,單位以秒計。

       

      6.2、key 相關命令

      Redis 鍵命令用于管理 redis 的鍵。

      key 相關常用命令如下:

      • set key value:添加 string 類型的 key,并設置該 key 的 value 值
      • keys *:查看當前庫所有key    (匹配:keys *1)
      • exists key:判斷某個key是否存在。存在返回1,否則返回0
      • type key:查看你的key是什么類型
      • del key:刪除指定的key。刪除成功則輸出1,否則輸出0
      • unlink key:異步刪除。僅將keys從keyspace元數據中刪除,真正的刪除會在后續異步操作。
      • expire key 時間:為給定的key設置過期時間,單位為秒。比如expire key 10,即該 key 在10秒后過期。key 如果不設置過期時間,默認是永不自動過期
      • ttl key:查看還有多少秒過期。該命令返回 key 有效時間的秒數,如果是 -1 則表示永不過期,-2 則表示已過期。

      操作示例:

       

      posted @ 2022-01-10 11:24  wenxuehai  閱讀(1452)  評論(0)    收藏  舉報
      //右下角添加目錄
      主站蜘蛛池模板: 色久综合色久综合色久综合| 亚洲国产成人精品无色码| 中文人妻AV大区中文不卡| 亚洲性日韩精品一区二区| 国产精品成人高潮av| 国产三级精品三级在线观看| 国产在线拍揄自揄拍无码| 精品国精品国产自在久国产应用男| 东方av四虎在线观看| 免费人成再在线观看视频| 免费无遮挡毛片中文字幕| 日韩精品一区二区三区激| 色欲av亚洲一区无码少妇| 日韩精品亚洲专在线电影| 午夜福利国产精品小视频| 最新国产精品拍自在线播放| jizzjizz日本高潮喷水| 色综合色狠狠天天综合网| 亚洲精品无码久久千人斩| 思热99re视热频这里只精品| 精品人妻av区乱码| 久久久午夜精品福利内容| 国产一级精品在线免费看| 四虎影视一区二区精品| 99RE8这里有精品热视频| 好紧好爽好湿别拔出来视频男男| 亚洲爆乳WWW无码专区| 亚洲另类激情专区小说图片| 亚洲午夜福利精品一二飞| 一区二区亚洲精品国产精| 视频一区视频二区制服丝袜 | 日本怡春院一区二区三区| 少妇高潮喷水正在播放| 国产高清精品在线91| 国产成人精品97| 国产精品久久久久影院色| 亚洲精品第一区二区三区| 99久久国产露脸国语对白| 免费人成视频x8x8国产| 定州市| 人与禽交av在线播放|