Redis基础知识总结概述
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。 --------出自百度百科
redis是屬于非關系型數據庫,其實呢它只是一種結構化儲存方法的集合,儲存結構就是key-value,說到redis就不得不提memcache,兩者區別就在于memcache是純內存的數據庫而redis是內存+磁盤,從redis3.0之后集群技術就相對成熟了,可以用于生產環境。
綜上可以簡單總結redis是內存數據庫,基于key-velue儲存數據,支持持久存儲,支持事務,支持主從,支持cluster(集群)。 redis官網:redis.io,redis命令參考手冊:http://redisdoc.com 手冊中詳細解釋并演示了命令的使用。
yum安裝redis
[root@BIGBOSS local]# yum install redis -y [root@BIGBOSS local]# rpm -q redis redis-3.2.12-1.el7.x86_64 # 啟動并檢查 [root@BIGBOSS local]# systemctl start redis [root@BIGBOSS local]# ss -tnl |grep 6379 LISTEN 0 128 127.0.0.1:6379 *:* # 此時并沒有配置端口和密碼可以直接連接 [root@BIGBOSS ~]# redis-cli 127.0.0.1:6379>保護模式
早期redis試運行在內網環境中的,是沒有烤爐安全認證問題的,也就是說只要服務啟動了任何人都能訪問redis中的數據,但是后來有了云,有人就把redis用在云環境中,而且把監聽的IP設置成了0.0.0.0,所以就出現了安全漏洞,容易被人黑,從3.2開始就增加了一個認證的特性protected-mode yes但是只這一條還是不行的,還需要添加一條密碼 requirepass 12345。
redis的應用場景
- 數據緩存:提高訪問性能
- session共享:會話保持
- 做為計數器:nginx+lua+redis實現計數器,實現ip的自動封禁。
- 消息隊列:構建實時消息系統,聊天、群聊
redis的持久化儲存
redis不同于memcahed的地方就是他的數據不僅在內存中也存在于磁盤上,而將數據從內存中保存到磁盤上就叫做數據的持久化儲存。
數據持久化的兩種機制:RDB、AOF
RDB可以每個一段時間進行一次持久化,并且是基于快照的方式實現的。儲存文件的位置/var/lib/redis下。
AOF的持久化,就是借助一個日志文件,這個日志文件只記錄所執行的寫的命令,不會記錄讀命令,再重啟服務器的時候,如果會九華數據中沒有,就會去都取日志中的內容進行重寫操作。
一般在使用持久化的是我們都是兩種方式結合使用,當然也可以只是用其中一個,或者禁用持久化功能。
redis中的數據類型
- 字符串類型:可以是字符串,也可以是數字
- 哈希(hash)類型:redis中的hash其實就是鍵值對的集合
- 列表(list)類型:列表中的元素是有順序的,列表中勻速是從0開始的,列表其實是雙向的(左L 右R)
- 集合類型:有序集合類型,無序集合類型
redis中的消息模式
- 隊列模式
在列隊模式中其實就是每次插入數據都是載入在最前面的,而先插入的數據在后面,列表中始終維持了一個隊列所以稱之為隊列模式。
- 發布-訂閱模式
發布-訂閱模式下,每個消息被廣播到所有消費者中
resis中的事務
- 事務的隔離性:每個事務都是一個隔離的操作,事務中所有的命令都會按照順序執行,并且執行過程不會被其他事物打斷。
- 原子性:事務中的明亮要么都執行,要么都不執行。
redis使用事務的過程:
演示事務:模擬場景tom銀行卡里有3000元,jerry銀行卡中有5000元,jerry給tom轉賬1000元,結果是兩人卡中都為4000元。
- 創建一個有序集合叫做salary,tom的值為3000,jerry得知為5000
- 使用事務完成轉賬
注意:如果不使用事務如下,當執行完ZINCRBY selary 1000 tom的操作,tom的賬戶里已經是4000了,此時jerry的賬戶里仍有5000,那么這1000是從哪里來的呢?很明顯這種不使用事務的操作會帶來數據不一致的問題
127.0.0.1:6379> ZINCRBY selary 1000 tom "4000" 127.0.0.1:6379> ZINCRBY selary -1000 jerry "4000" 127.0.0.1:6379> ZRANGE selary 0 10 withscores 1) "jerry" 2) "4000" 3) "tom" 4) "4000"慢日志查詢
慢日志主要依靠兩個變量來設置
- slowlog-log-slower-than:指定面日志查詢的時間,單位是毫秒
- slowlog-max-len:指定最多紀錄多少條慢日志
慢日志的設定可以再配置文件中修改,也可以直接在命令行修改參數,但是在命令行修改只是修改內存中的但能立即生效,想要永久生效需要修改配置文件。
本博文中提到的有些概念并沒有進行深入的剖析,知識做了整體的概述,后續博文中會有更詳細的講解。
------做運維之前很矯情的小年輕-----
總結
以上是生活随笔為你收集整理的Redis基础知识总结概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL乱码问题解决步骤详解
- 下一篇: Redis的数据类型详解