非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL) - redis mongodb
更符合大數(shù)據(jù)的時(shí)代需求 - 處理速度快,性能較好 因?yàn)殛P(guān)系型數(shù)據(jù)庫(kù)要保持一致性
文檔數(shù)據(jù)庫(kù) - MongoDB(保存海量數(shù)據(jù)) / ElasticSearch
鍵值對(duì)數(shù)據(jù)庫(kù) - redis
列族數(shù)據(jù)庫(kù)
圖數(shù)據(jù)庫(kù)
redis
將所有東西都放在內(nèi)存
Redis - KV數(shù)據(jù)庫(kù) - 內(nèi)存 - 單線程+異步I/O (多路I/O復(fù)用)
計(jì)算密集型應(yīng)用 - 多進(jìn)程 + 多線程
I/O密集型應(yīng)用 - 單線程 + 異步I/O (協(xié)程 也叫微線程)
tornado / node.js 也是單線程 + 異步I/O
2008年 - LLOOGG - log (日志)
Mysql - Redis - Remote DIctionary Server 遠(yuǎn)程字典服務(wù) - redis
Github / Twitter / Sina / tencent / baidu / meituan 這些網(wǎng)站都用了redis
冷數(shù)據(jù)(不經(jīng)常使用) / 熱數(shù)據(jù)(經(jīng)常使用)
所以熱數(shù)據(jù)適合放在redis中, 不要什么都放在redis, 不然內(nèi)存爆炸
redis能做什么
1.高速緩存服務(wù)(用戶經(jīng)常訪問(wèn)的數(shù)據(jù)從數(shù)據(jù)庫(kù)搬到內(nèi)存)
2.實(shí)時(shí)排行榜
3.投票點(diǎn)贊
4.消息隊(duì)列
yum install redis - 不是最近版本
源代碼構(gòu)建安裝 make && make install
1.啟動(dòng)Redis服務(wù)器 - 存數(shù)據(jù):
& - 在后臺(tái)運(yùn)行
--requirepass 設(shè)置的你的密碼
-- 第一種啟動(dòng)
redis-server --port 1234 --requirepass 123456 --appendonly yes
-- 第二種
redis-server 配置文件路徑(redis-5.0.4/redis.log &)
redis-server --requirepass 123456 > redis.log &
查看redis進(jìn)程
ps -ef | grep redis
不想看到redis包
ps -ef | grep redis | grep -v grep
注意: 加入你忘了你設(shè)置的密碼: 你可以用shutdown 來(lái)退出redis環(huán)境, 再執(zhí)行
redis-server --requirepass 123456 > redis.log &
2.啟動(dòng)客戶端:
a.連自己的
redis-cli
b.遠(yuǎn)程連接
redis-cli -h 主機(jī)ip地址 -p 端口
進(jìn)入redis之后
主機(jī): 端口> auth 密碼(你剛剛設(shè)置的密碼)
主機(jī): 端口
ping 查看服務(wù)器是否連的上
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> ping
PONG
忘了命令?
不存在的 redis命令網(wǎng)址
哈希存儲(chǔ) - 性能非常好的存儲(chǔ)方案 - set
obj --- 哈希函數(shù)---> 哈希碼(散列碼) ---> 對(duì)象在內(nèi)存中存儲(chǔ)的位置
性能好在 你通過(guò)算出哈希碼就能知道有沒(méi)有這個(gè)對(duì)象
MD5 - 是哈希函數(shù)中的算法
文件 ---> MD5 / SHA1 / SHA256 ---> 哈希碼 (數(shù)字指紋/簽名)
hash類型來(lái)保存對(duì)象方便
127.0.0.1:6379> hset stu1 id 1001
(integer) 1
127.0.0.1:6379> hset stu1 name wangdachui
(integer) 0
127.0.0.1:6379> hset sex male
(error) ERR wrong number of arguments for 'hset' command
127.0.0.1:6379> hset stu1 sex male
(integer) 1
127.0.0.1:6379> hset stu1 birth 1990-1-1
127.0.0.1:6379> hmset stu2 id 1002 name leixin sex girl birth 1997-10-1
OK
127.0.0.1:6379> hvals stu2
1) "1002"
2) "leixin"
3) "girl"
4) "1997-10-1"
127.0.0.1:6379> hgetall stu1
1) "name"
2) "wangdachui"
3) "id"
4) "1001"
5) "sex"
6) "male"
7) "birth"
8) "1990-1-1"
127.0.0.1:6379> type stu1
hash
=============================
驗(yàn)證hash密碼
import hashlib
# TODO 用戶密碼要存入數(shù)據(jù)庫(kù)的時(shí)候就要用hash碼, 不能用明文的密碼
# TODO 所以為什么官網(wǎng)那些注冊(cè)密碼的時(shí)候,要有數(shù)字,字母和字符,而不是純數(shù)字,
# 就是害怕那些人通過(guò)hash反摘要來(lái)獲取你的密碼
# 驗(yàn)證hash密碼
def main():
# md5(218比特)-目前已被破(但是對(duì)于我們足夠了) / sha1 / sha256
digester = hashlib.md5() # bit是0或1 但是是2的18次方
with open('', 'rb') as f: # 有hash碼的文件(python官網(wǎng)下載包就是)
# TODO 寫(xiě)兩次讀麻煩
# data = f.read(1024) # 寫(xiě)2的次方看是否是合格的程序員
# while data:
# digester.update(data)
# data = f.read(1024) # 又多一次無(wú)聊 用另外的方法
# TODO iter - python自帶的迭代器
for data in iter(lambda: f.read(1024), b''):
digester.update(data)
# digest - 摘要
print(digester.hexdigest())
if __name__ == '__main__':
main()
=================================
讀寫(xiě)分離
給別人當(dāng)奴隸(你只能讀,)
首先你先退出你的redis環(huán)境
redis-cli
auth 密碼
ping
shutdown - 退出自己的環(huán)境
然后連接別人的redis環(huán)境
redis-server --slaveof ip(他的ip) 端口(一般都為6379) --re
quirepass 他的ip >redis.log &
主人可以通過(guò)
info replication - 查看多少人連接你
恢復(fù)你自己的主人身份
slaveof no one
ctrl + p 查看有哪些參數(shù)
ifconfig etho - 查看內(nèi)網(wǎng)地址
終端解壓壓縮包
gunzip