《NOSQL相關入門掌握知識,你過關了嗎》要點:
本文介紹了NOSQL相關入門掌握知識,你過關了嗎,希望對您有用。如果有疑問,可以聯系我們。
什么是noSQL
not only sql
非關系型數據庫
為什么必要NoSQL
web2.0大規模動態網站的興起
high performance ,高并發讀寫,動態頁面展示與交互,好比微博點贊評論等操作,實時統計在線人數排行榜等
huge storage,海量數據的高效存儲和拜訪,大型網站的用戶登錄系統
high scalability && high availability,高可擴展性和高可用性
主流NOSQL產品
redis,mongodb,couchdb
NoSQL的特點
易擴展
靈活數據模型
大數據量,高性能
高可用
NoSQL數據庫的四大分類
鍵值存儲,redis
優勢,快速查詢
劣勢,存儲數據缺少結構化
列存儲,hbase
優勢,快速查詢
劣勢,功能局限
文檔數據庫,mongodb
優勢,數據結構要求不嚴格
劣勢,查詢性能并非特別高,缺少統一查詢的語法
圖形數據庫,infogate
優勢,社交網絡,利用圖結構的相關算法
劣勢,必要對整個圖做算法分析,不利于分布式方案
回到頂部(go to top)
C語言編寫的高性能鍵值對數據,支持的鍵值數據類型:
字符串類型
列表類型
有序集合類型
散列
集合類型
Redis的應用場景:
緩存
網站拜訪統計
任務隊列
數據過期處理
應用排行榜
分布式集群架構中的session分離
回到頂部(go to top)
3.1 redis安裝
依賴環境
gcc-c++
1 環境準備
#官網下載 redis 3.2.5版本wget http://download.redis.io/releases/redis-4.0.1.tar.gz #安裝 C 編譯環境 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc gcc-c++2安裝 解壓安裝包后,進入文件目錄編譯,編譯結束時,會提示 Hint: It's a good idea to run 'make test' ,建議在安裝前先測試預安裝下,make test預安裝后,遇到錯誤:You need tcl 8.5 or newer in order to run the Redis test ,缺失安裝包tcl,所以必要先安裝這個 安裝包后再次運行 make test,正常后再進行redis安裝. 詳細步驟如下: #解壓二進制包tar -zvxf /opt/redis-3.2.5 #進入到文件目錄cd redis-3.2.5 #編譯make #測試安裝(稍微耗費點時間)make test #可能會提醒必要安裝最新版的tcl#yum install tcl #指定路徑安裝make PREFIX=/usr/local/redis install
安裝結束后,進入到安裝路徑中,
[root@bogon bin]# ls -lh /usr/local/redis/bin/
total 22M
-rwxr-xr-x. 1 root root 2.4M Aug 13 18:40 redis-benchmark
-rwxr-xr-x. 1 root root 5.5M Aug 13 18:40 redis-check-aof
-rwxr-xr-x. 1 root root 5.5M Aug 13 18:40 redis-check-rdb
-rwxr-xr-x. 1 root root 2.5M Aug 13 18:40 redis-cli
lrwxrwxrwx. 1 root root 12 Aug 13 18:40 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 5.5M Aug 13 18:40 redis-server
這幾個指令用途分別是:
redis-benchmark
性能測試工具
redis-check-aof
aof文件修復工具
redis-check-rdb
rdb文件檢查工具
redis-cli
redis客戶端
redis-server
redis服務器啟動命令
redis-sentinel
3.2 配置文件修改
按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼
3.3 服務啟動與關閉
按 Ctrl+C 復制代碼
按 Ctrl+C 復制代碼
回到頂部(go to top)
redis有支持非常多種語言編寫的客戶端,可以從官網查看 https://redis.io/clients ,redis-py是redis官方網站首選的python客戶端開發包,本人只會點點python,所以從這個入門.
redis-py的github地址:https://github.com/andymccurdy/redis-py
回到頂部(go to top)
鍵值對種key的注意事項:
不要過長
最好不要超過1024個字節
不僅消耗內存,也影響查找效率
不要過短
好比設置為a,沒有實際意義,可能會降低key的可讀性
統一命名規范
5.1字符串 string
string中的一個key對應一個value,values最長可達512Mb.
string常用命令:
賦值
set key value
取值
get key
取值后賦值
getset key value
數值增減
自增1
如果該key不存在,則創建該key,并賦值為0,0自增后為1,等同于增加 【key,1】鍵值對
如果該key存在,則value自增加1
incr key
自減1
如果該key不存在,則創建該key,并賦值為0,0自減后為-1,等同于增加 【key,-1】鍵值對
如果該key存在,則value自減1
decr key
自增指定值
如果該key不存在,則創建該key,并賦值為0,0自增numbers,等同于增加 【key,numbers】鍵值對
如果該key存在,則value自增numbers
incrby key numbers
自減指定值
如果該key不存在,則創建該key,并賦值為0,0自減numbers,等同于增加 【key,-numbers】鍵值對
如果該key存在,則value自減numbers
decrby key numbers
刪除
del key
擴展
value追加string內容
append key string
5.2 哈希 hash
hash可以存儲多個鍵值對之間的映射,它就像是一個迷你型的redis.
賦值
hset key field value
hmset key field value [field value ... ]
取值
hget key field
hmget key field [field ...]
hgetall key
增加數字
hincrby key field number
刪除
hdel key field
del key
自學命令
hexists key field
hlen key
hkeys key
hvals key
5.3 字符串列表 list
lish的順序是依照插入的順序,可以在頭部跟尾部插入數據,如果是在list的兩頭進行操作,那么效率是很高的,但是如果在list中,則會耗費一定時間.
list的類型:
arraylist使用數組方式
根據索引查詢速度是非常快的
但是新增跟刪除操作涉及到位移操作,則會比擬慢
linkedlist使用雙向鏈接方式
每個元素都記錄了前后元素的指針,刪除跟新增只必要修改前后指針,數據操作較快
list常用的命令:
兩端添加
lpush key value [value ...]
rpush key value [value ...]
查看列表
lrange key start stop
指定位置push
lset key index value
列表中第幾個位置插入value,注意位置從0開始
指定value插入值
linsert key before|after pivot value
在列表中,從左到右,第一個等于pivot這個值的前面或者后面,插入valuse
兩端彈出
lpop key
刪除列表最左邊的value
rpop key
刪除列表最右邊的value
rpoplpush source distination
從source列表右邊刪除一個value,并把這個value存儲進入distination列表中
適用于消息發布過程中的備份操作
獲取列表元素個數
llen key
獲取列表的長度
擴展命令
lpushx key value
如果列表存在,則從左端插入push valuse進入列表中,否則返回0
rpushx key value
如果列表存在,則從右端插入push valuse進入列表中,否則返回0
lrem key count value
count>0,從列表的左端開始刪除 值等于 value,一共刪除count個
count<0,從列表的右端開始刪除 值等于 value,一共刪除count個
count=0,刪除 整個列表中所有 值等于 value
5.4 字符串集合 set
和list類型不同的是,set集合中不允許出現重復的元素,set最大可以包括的元素是 4294967295 .注意,set中是沒有順序的.
用于維護用戶對象的唯一性,以及處理數據對象之間的關聯關系,可以進行并集交集差集運算.好比購買A產品的用戶ID,放在一個set中,購買另外一個B產品的用戶ID,放在另外一個set中,這樣就很方便計算同時購買兩個產品的用戶等.
list常用指令:
添加刪除元素
sadd key member [member ...]
srem key member [member ...]
del key
獲取集合中的元素
smembers key
差集運算
sdiff key1 [key ...]
求集合key1與其他集合的差集
sdiffstore destination key1 [key ...]
求集合key1與其他集合的差集,并把結果存儲在destination集合中
交集運算
sinter key [key...]
求多個集合的交集
sinterstore destination key [key...]
求多個集合的交集,并把結果存儲在destination集合中
并集運算
sunion key [key...]
求多個集合的并集
sunionstore destination key [key...]
求多個集合的并集,并把結果存儲在destination集合中
擴展命令
sismember key member
查看member在key中是否存在
srandmember key [count]
集合key中隨機放回 count 個元素
scard key
查看集合個數
5.5 有序字符串集合 sorted set
sorted set跟set是比較類似的,集合中不允許出現重復的元素,那么有啥區別呢?sorted set有順序,從小到大排序,更新操作非常快,拜訪數據也非常高效.
應用場景:游戲排名、微博熱點
常用命令:
獲得元素
zscore key member
獲取有序集合中的某個元素的score值
zrange key start stop [withscores]
zrangebyscore key mim max [withscores] [limit offset count]
添加元素
zadd key score member [score member ...]
刪除元素
zrem key member [member...]
zremrangebyscore key min max
擴展查詢
zincrby key increment member
zscore key member
zcount key min max
回到頂部(go to top)
keys *
查看所有keys
del key [key...]
刪除多個key
exists key
判斷某個key是否存在,存在返回1,不存在返回0
rename key newkey
重命名某個key
expire key seconds
設置某個key的生命期,過了這個時間就是過期數據
ttl key
查看該key的生命還剩下多少秒
type key
查看key的類型
回到頂部(go to top)
7.1 多數據庫
redis最多支持16個數據,下標0-15表示第幾個數據庫.默認是在0號數據.切換數據庫可以通過select dbnumber 來切換,也可以通過move 來移動key從當前數據到指定的數據庫.
489034603
7.2 事務
事務的指令:multi、exec、discard.redis中,如果某個命令執行失敗,后面的命令還會繼續執行.multi,開啟事務,這個指令后的指令默認為在同一個事務內,exec等同于提交,discard等同于回滾.
489034603
回到頂部(go to top)
redis的高性能是因為數據都在內存中,如果數據庫重啟,則所有數據都會丟失,那么如何進行數據持久化呢?
RDB持久化
默認支持,在指定的時間內,把內存的數據寫入磁盤
AOF持久化
以日志的形式記錄每一個操作,啟動的時候,重新執行所有log
無持久化
不進行持久化,則認為redis的作用為緩存,無需持久化數據
RDB與AOF同時使用
8.1 RDB持久化
優勢
redis數據庫僅包括一個文件,對于文件備份是非常方便的,如果系統出現災難時,較容易恢復
災難恢復時,備份文件較為容易單獨轉移到其他存儲介質
數據量很大的時候,啟動速度快
劣勢
不能夠保證數據無丟失,數據丟失時間 = 當前時間-最近備份時間
子進程完成持久化工作,如果數據集很大的時候,可能會造成短時間內redis所在服務器停止對外服務
配置
save 900 1 :900秒內至少有1個數據變化,則進行持久化
RDB默認配置文件中就有,可以查看redis.conf文件中關于save的設置
save 300 10 :300秒內至少有10個數據發生變化,則進行持久化
save 60 10000 : 60秒內至少有1w個數據發生變化,則進行持久化
dbfilename 則是命名當前持久文件的名字
dir,則是定義當前持久化文件的存放路徑
8.2 AOF持久化
優勢
更高的數據平安性
每秒同步,最高丟失1s數據
每操作數同步,每次發生數據的變化都會立即記錄到磁盤中,性能最低
append追加文件備份
備份過程中出現問題,不會破壞之前的日志備份
如果寫入了一半數據,然后出現系奔潰的問題,在redis下一次啟動之前,可以通過redis_check_aof工具辦理數據一致性問題
如果日志備份過大
redis會自動啟動日志重寫機制,append過程中,會把備份數據寫入到老的備份文件中,并且會用一個新文件,記錄此期間的修改數據語句
AOF包括一個格式清晰的數據修改操作語句的日志文件
劣勢
相同數量的數據集文件,比RDB的要打
AOF效率低于RDB
必要人員配置,非默認配置
配置
在redis.conf文件中,配置一下內容
appendonly yes:啟動appendonly,開啟AOF備份
appendfilename "appendonly.aof" :AOF備份的文件名
appendfsync always :每個修改操作同步備份一次
appendfsync everysec:1s同步備份一次
appendfsync no :不同步
測試配置
簡單測試案例
redis中配置AOF,選擇每操作一次就備份的機制,增刪改數據后,執行flushall,然后通過備份文件來恢復數據到flushall之前
步驟
啟動AOF,選擇每操作一次就備份
appendonly yes
appendfsync always
重啟redis
/usr/local/redis/bin/redis-cli shutdown
/usr/local/redis/bin/redis-server /etc/redis.conf
造數據
執行flushall
處理備份文件
vim /usr/local/redis/appendonly.aof
刪除flushall的操作記錄
重啟數據庫
/usr/local/redis/bin/redis-cli shutdown
/usr/local/redis/bin/redis-server /etc/redis.conf
檢查數據
有些代碼似乎不可以上傳,必要更多學習資料和指導可以添加圖片下方的交流群,愿在成長的道路上能夠相互助力.
維易PHP培訓學院每天發布《NOSQL相關入門掌握知識,你過關了嗎》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9230.html