1.redis學習 數據預設寫入到記憶體,如果斷電,伺服器宕機,redis進程掛掉,數據會丟失。 selenium操作瀏覽器時,要註意瀏覽器資源釋放,方式記憶體泄露,崩潰 mysql是文件型資料庫,預設持久化到硬碟上 redis 是記憶體型資料庫 2.redis安裝學習 yum安裝,最簡單,配置yum源, ...
1.redis學習
數據預設寫入到記憶體,如果斷電,伺服器宕機,redis進程掛掉,數據會丟失。
selenium操作瀏覽器時,要註意瀏覽器資源釋放,方式記憶體泄露,崩潰
mysql是文件型資料庫,預設持久化到硬碟上
redis 是記憶體型資料庫
數據預設寫入到記憶體,如果斷電,伺服器宕機,redis進程掛掉,數據會丟失selenium操作瀏覽器時,要註意瀏覽器資源釋放,方式記憶體泄漏,崩潰。 with opne() 預設close關閉文件句柄 word工具,額米有保存前,數據放在記憶體里,保存後持久化到磁碟上,永久存儲在mysql是文件型資料庫,預設持久化到磁碟上
2.redis安裝學習
- yum安裝,最簡單,配置yum源,yum倉庫才可以
- 源碼編譯安裝,指定安裝路徑,自定製第三方擴展模塊功能
- rpm軟體包手動安裝,很爛,手動解決依賴關係,不適用
- 小拓展:ctrl +alt + f1~f7 f1是圖形化(物理伺服器的Linux界面)
1.redis安裝步驟:
1.解決編譯安裝所需的依賴環境
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2.在目標目錄下 ,下載源代碼包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
解壓:tar -zxvf -redis-4.0.10.tar.gz
3.執行./configure --prefix=/opt/redis/ #釋放makefile,告訴gcc編譯器,redis的安裝路徑
如果預設沒有configure腳本,出現了makefile,直接make&&make install 安裝即可
4.編譯且安裝
make && make install
- 小拓展
#如果你發現雲伺服器被礦機攻擊,有一個進程占用100%CPU資源!
解決:
kill -9 殺死進程
檢查定時任務
crontab -l 檢查定時任務
crontab -e 編輯定時任務文件,可以刪除,定時任務。
全局搜索病毒文件,刪除它(註意惡意病毒,篡改了文件名,瞭解即可)
find / -name 病毒文件
找到了 rm -rf 刪除
如果 刪除不掉,很有可能文件被加鎖了
lsattr filename.txt
chattr -a filename #給文件去鎖
2.編譯完成後,即可使用redis
啟動redis服務:
redis-server
直接這樣執行:
會出現不安全情況,容易被攻擊
3.指定配置文件,Centos安全的啟動redis服務端
(1)redis沒有用戶概念,redis只有密碼
(2)redis預設在工作在保護模式下。不允許遠程任何用戶登錄的(protected-mode)
更改啟動埠
port 6380 #更改預設啟動埠
添加redis密碼
requirepass xxxxxx #設置redis啟動密碼,xxxx是自定義的密碼
開啟redis安全模式
protected-mode yes #打開保護模式
- 示例演示 important!!!
1.第一步
[root@xujunk safe_conf]#vim /safe_conf/redis.conf
#在redis.conf配置信息如下
bind 127.0.0.1
protected-mode yes
port 6379
requirepass haohaio
daemonize yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
2.用自己配置好redis.conf 開啟redis
[root@xujunk safe_conf]#redis-server /opt/my_redis/redis-4.0.10/safe_conf/redis.conf
3.查看redis啟動狀態:
[root@xujunk safe_conf]#ps -ef |grep redis
4.redis-cli啟動,haohaiyou是密碼
[root@xujunk safe_conf]#redis-cli -p 6400 -h 127.0.0.1 -a haohaiyou
4.過濾出配置文件有益的信息(取出空白行和註釋行)
- redis.conf
#找出註釋行的數據
grep "^#" redis.conf
#找出空行
grep "^$"
#找出除空白行 和 註釋行 以外的行
[root@xujunk redis-4.0.10]#grep -v "^#" redis.conf | grep -v "^$"
#-v 作用取相反
5.指定配置文件啟動:
bind 192.168.182.130
#綁定ip,如需要遠程訪問,需要填寫伺服器ip
protected-mode yes #安全模式
port 6800 #埠
requirepass haohaio #密碼
daemonize yes
#守護進程方式運行,後臺運行
pidfile /var/run/redis_6379.pid
#進程id文件
loglevel notice
#日誌等級
logfile ""
#日誌文件
slaveof
#主從複製
- 啟動redis服務端:
[root@xujunk redis-4.0.10]#redis-server redis.conf
- 啟動redis客戶端
[root@xujunk redis-4.0.10]#redis-cli -p 6379 -h 127.0.0.1
- 查看redis 進程狀態
ps -ef|grep redis
netstat -tunlp|grep redis
#LISTEN 表示監聽狀態
- 驗證連接成功
客戶端輸入:
127.0.0.1:6379> ping
返回值:PONG
3.redis 數據結構
- redis是一種高級的key:value存儲系統,其中balue支持五種數據類型。
- 字元串
- 散列
- 列表
- 集合
- 有序集合
基本命令:
127.0.0.1:6379> keys * #查看所有的key 127.0.0.1:6379> type key #查看key的類型 127.0.0.1:6379> expire key seconds #過期時間 示例: >expire name "Tom" 10 #表示10秒後 {"name":"Tom"}鍵值對將消失 127.0.0.1:6379> ttl key #查看key過期剩餘時間 -2表示key已經不存在了 127.0.0.1:6379>persist key #取消key的過期時間 -1表示key存在,沒有過期時間 127.0.0.1:6379>exists key #判斷key存在 存在返回1 否則0 127.0.0.1:6379>exists key #判斷key存在不? 存在返回1 否則0 127.0.0.1:6379>del key #刪除key 返回1代表刪除成功,返回0代表刪除失敗 127.0.0.1:6379>dbsize #計算當前庫key的數量, 沒有參數
1.字元串:
- strings類型
1.set 設置key
127.0.0.1:6379> set k1 "v1"
>>>OK
2.get 獲取key
127.0.0.1:6379> get k1
>>>"v1"
3.append 追加string
127.0.0.1:6379>append name ' dsb'
>>> 6 #返回追加後字元串長度
4.mset 追加key的string
127.0.0.1:6379> mset u1 "xm" u2 "xg" u3 "xh"
OK
5.mget 獲取多個value
127.0.0.1:6379> mget u1 u2
1) "xm"
2) "xg"
6.del 刪除key
127.0.0.1:6379> del k1
(integer) 1
7. incr 遞增 +1
127.0.0.1:6379> incr num
(integer) 10
8.decr 遞減-1
127.0.0.1:6379> decr num
(integer) 9
2.list類型:
- list類型為雙向隊列
1.lpush 從列表左邊插入
127.0.0.1:6379>lpush hobby "sleep" "swim" "read"
2.lrange 獲取一定長度的元素
127.0.0.1:6379> lrange hobby 0 3
1) "read"
2) "swim"
3) "sleep"
3.rpush 從列表右邊插
127.0.0.1:6379> lrange hobby 0 4
1) "read"
2) "swim"
3) "sleep"
4) "pingpang"
4.ltrim 截取一定長度列表,從索引0取到2,刪除其餘的元素
127.0.0.1:6379> ltrim hobby 0 2
OK
5.llen 查看長度
127.0.0.1:6379> llen hobby
(integer) 3
6.lpop 刪除最左邊一個元素
127.0.0.1:6379> lpop hobby
"read"
7.rpop 刪除最右邊一個元素
127.0.0.1:6379> rpop hobby
"sleep"
8.lpushx/rpushx key存在添加值,不存在不處理
127.0.0.1:6379> lpushx hobby "read"
(integer) 2
3.sets集合類型:
- redis的集合,是一種無序的集合,集合中的元素沒有先後順序。
- 集合相關的操作也很豐富,如添加新元素、刪除已有元素、取交集、取並集、取差集等。我們來看例子:
1.sadd 添加 元素
127.0.0.1:6379> sadd zoo "tigger"
(integer) 1
2.srem 刪除元素
127.0.0.1:6379> srem zoo "tigger"
(integer) 1
3.sismember 判斷是否為set的一個元素
127.0.0.1:6379> sismember zoo "tigger"
(integer) 1
4.smembers 返回集合所有的成員
127.0.0.1:6379> smembers zoo
1) "monkey"
2) "pandas"
3) "tigger"
5.sdiff 返回一個集合和其他集合的差異
127.0.0.1:6379> sdiff zoo zoo2
1) "tigger"
2) "pandas"
#找出集合zoo中有的,而zoo2中沒有的元素
6.sunion 返回幾個集合的並集
127.0.0.1:6379> sunion zoo zoo2
1) "tigger"
2) "monkey"
3) "pandas"
4) "bird"
5) "fox"
4.有序集合(以Z開頭的命令)
用來保存需要排序的數據,例如排行榜,成績,工資等。
實例:
#利用有序集合排序,排序學生的成績
127.0.0.1:6379> zadd score 70 "wang"
(integer) 1
127.0.0.1:6379> zadd score 60 "li"
(integer) 1
127.0.0.1:6379> zadd score 60 "liu"
(integer) 1
#zreverange倒敘 zrange正序
127.0.0.1:6379> zrevrange score 0 -1 withscores
1) "wang"
2) "70"
3) "liu"
4) "60"
5) "li"
6) "60"
127.0.0.1:6379> zrange score 0 -1 withscores
1) "li"
2) "60"
3) "liu"
4) "60"
5) "wang"
6) "70"
zrem 移除
127.0.0.1:6379> zrem score wang
(integer) 1
zcard 返回有序集合基數
127.0.0.1:6379> zcard score
(integer) 2
#2個基數
zscore 返回成員的score值
127.0.0.1:6379> zscore score li
"60"
#查詢score鍵,li對象的值
zrank 返回有序集合中,成員的排名,預設按score,從小到大排序
127.0.0.1:6379> zrank score wang
(integer) 3
#第三名 從0索引開始
5.哈希數據結構
- 哈希結構就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } ,取出v2 必須 k1,取出k2
- hashes即哈希。哈希是從redis-2.0.0版本之後才有的數據結構。
- hashes存的是字元串和字元串值之間的映射,比如一個用戶要存儲其全名、姓氏、年齡等等,就很適合使用哈希。
1.hset 設置散列值
127.0.0.1:6379> hset news1 title "New1 title"
(integer) 1
127.0.0.1:6379> hset news1 content "This is first news"
(integer) 1
2.hget 獲取散列值
127.0.0.1:6379> hget news1 content
"This is first news"
127.0.0.1:6379> hget news1 title
"New1 title"
3.hmset 設置多對散列表
127.0.0.1:6379> hmset news2 title "New2 title" content "This is seconde news"
OK
4.hmget 獲取多對散列值
127.0.0.1:6379> hmget news2 title content
1) "New2 title"
2) "This is seconde news"
5.hsetnx 如果散列已經存在,則不設置(防止覆蓋key)
# 1代表設置成功,0代表設置失敗
127.0.0.1:6379> hsetnx news2 title "news 2"
(integer) 0
127.0.0.1:6379> hsetnx news3 title "news 3"
(integer) 1
6.hkeys 返回所有keys
127.0.0.1:6379> hkeys news1
1) "content"
2) "title"
7.hvals 返回所有values
127.0.0.1:6379> hvals news1
1) "This is first news"
2) "New1 title"
8.hlen 返回散列包含域(field)的數量
127.0.0.1:6379> hlen news1
(integer) 2
127.0.0.1:6379> hlen news2
(integer) 2
9.hdel 刪除散列指定的域(field)
127.0.0.1:6379> hdel news1 title
(integer) 1
127.0.0.1:6379> hget news1 title
(nil)
10.hexists 判斷是否存在
127.0.0.1:6379> hexists news1 title
(integer) 0
127.0.0.1:6379> hexists news1 content
(integer) 1
#0表示不存在,1表示存在