redis初識

来源:https://www.cnblogs.com/1naonao/archive/2019/12/26/12104376.html
-Advertisement-
Play Games

redis介紹 redis是什麼 redis是一種基於鍵值對的NOsql資料庫,與很多鍵值對資料庫不同,redis中的值 等多種數據機構和演算法組成,因為redis會將所有的數據都放在記憶體中,所以他的讀寫性能非常驚人,不僅如此,redis還可以將記憶體中的數據利用快照和日誌的形式保存在硬碟上,redis ...


redis介紹

redis是什麼

redis是一種基於鍵值對的NOsql資料庫,與很多鍵值對資料庫不同,redis中的值string,hash,list,set,zset,geo等多種數據機構和演算法組成,因為redis會將所有的數據都放在記憶體中,所以他的讀寫性能非常驚人,不僅如此,redis還可以將記憶體中的數據利用快照和日誌的形式保存在硬碟上,redis還提供了鍵過期,發佈訂閱,流水線等附加功能

redis重要性

1.速度快

Redis所有的數據都存放在記憶體中
Redis使用C語言實現
Redis使用單線程架構

2.基於鍵值對的數據結構伺服器

5中數據結構:字元串,哈希,列表,集合,有序集合

3.豐富的功能

提供了鍵過期功能,可以實現緩存
提供了發佈訂閱功能,可以實現消息系統
提供了pipeline功能,客戶端可以將一批命令一次性傳到Redis,減少了網路開銷

4.簡單穩定

源碼很少,3.0版本以後5萬行左右.
使用單線程模型法,是的Redis服務端處理模型變得簡單.
不依賴操作系統的中的類庫

5.客戶端語言多

java,PHP,python,C,C++,Nodejs等

6.持久化

RDB和AOF

7.主從複製

8.高可用和分散式

哨兵
集群

redis應用場景

1.緩存-鍵過期時間

緩存session會話
緩存用戶信息,找不到再去mysql查,查到然後回寫到redis

2.排行榜-列表&有序集合

熱度排名排行榜
發佈時間排行榜

3.計數器應用-天然支持計數器

帖子瀏覽數
視頻播放次數
商品瀏覽數

4.社交網路-集合

踩/贊,粉絲,共同好友/喜好,推送,打標簽

5.消息隊列系統-發佈訂閱

配合elk實現日誌收集

redis單節點安裝部署

1.目錄規劃

/data/soft/                         #redis下載目錄
/opt/redis_{PORT}/{conf,logs,pid}   #redis安裝目錄
/data/redis_{PORT}/redis_{PORT}.rdb #redis數據目錄
/root/scripts/redis_shell.sh        #redis運維腳本

2.安裝命令

### 編輯hosts文件

[root@db01 ~]# tail -3 /etc/hosts
10.0.0.51 db01    
10.0.0.52 db02    
10.0.0.53 db03

###
yum install gcc -y
#make distclean  && make
mkdir -p /data/soft
mkdir -p /data/redis_6379
mkdir -p /opt/redis_6379/{conf,pid,logs}
cd /data/soft/
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxf redis-3.2.9.tar.gz -C /opt/
ln -s /opt/redis-3.2.9/ /opt/redis
cd /opt/redis
make && make install

3.配置文件

cat >/opt/redis_6379/conf/redis_6379.conf <<EOF

### 以守護進程模式啟動

daemonize yes

### 綁定的主機地址

bind 127.0.0.1 10.0.0.51 

### 監聽埠

port 6379

### pid文件和log文件的保存地址

pidfile /opt/redis_6379/pid/redis_6379.pid
logfile /opt/redis_6379/logs/redis_6379.log

### 設置資料庫的數量,預設資料庫為0

databases 16

### 指定本地持久化文件的文件名,預設是dump.rdb

dbfilename redis_6379.rdb

### 本地資料庫的目錄

dir /data/redis_6379
EOF

4.啟動redis

redis-server /opt/redis_6379/conf/redis_6379.conf

5.檢查是否啟動

ps -ef|grep redis
netstat -lntup|grep redis

6.進入redis

redis-cli

redis全局操作命令

0.寫入key
set k1 v1
set k2 v2
set k3 v3

1.查看所有的key!線上禁止使用!
keys *

2.查看有多少個key,註意,是估值
DBSIZE

3.查看是否存在這個KEY
EXISTS k1
EXISTS k1 k2 k3 

狀態碼:
0   表示這個key不存在
1   表示這個key存在
N   表示有的N個key存在

4.刪除key(無論是什麼數據類型,都可以刪除)
DEL k1
DEL k1 k2 k3

狀態碼:
0   表示這個key不存在
1   表示這個key存在,並且刪除成功
N   表示有的N個key存在,並且刪除N個Key


5.鍵過期
設置過期時間
EXPIRE k1 100

取消過期時間,不修改key原來的值
PERSIST k1  

狀態碼:
0: 表示這個key不存在
1: 表示這個key存在,並且設置過期時間成功

查看key是否過期
TTL k1

狀態碼:
-1 :這個key存在,並且永不過期
-2 :這個key不存在
N  :這個key存在,並且在N秒後過期    

結論:
過期後的key直接會被刪除

6.鍵的數據類型
type key

字元串操作

Redis並不是簡單地key-value存儲,實際上他是一個數據結構伺服器,支持不同類型的值.
Redis Strings
這是最簡單的Redis類型,如果你只用這種類型,Redis就像一個持久化的memcache伺服器(註:memcache的數據僅保存在記憶體中,伺服器重啟後,數據將丟失.)
操作命令:

  • 通常用SET command 和 GET command來設置和獲取字元串值
  • INCR命令將字元串值解析成整型.將其加1,最後結果保存為新的字元串,類似命令: INCRBY,DECR,DECRBY
  • MSET和MGET可以一次存儲或獲取多個key對應的值.
  • EXISTS命令返回1或0標識給定key的值是否存在.
    使用DEL命令可以刪除key對應的值,
    DEL命令返回1或0標識是被刪除(值存在)或者沒被刪除(key對應的值不存在).
  • Type命令可以返回key對應的存儲類型
  • 可以對key設置一個超時時間,當這個時間到達後被刪除
  • PERSIST命令去除超時時間
1.設置一個key
set k1 v1 

2.查看一個key
get k1 

3.設置多個key
MSET k1 v1 k2 v2 k3 v3

4.查看多個key
MGET k1 k2 k3

5.天然計數器
加1:
set k1 1
INCR k1
get k1 

加N:
INCRBY k1 100

減N:
INCRBY k1 -1 

減N:
INCRBY k1 -N

列表

插入列表:
LPUSH:從列表左側插入數據
RPUSH:從列表右側插入數據
最後LRANGE可以從list中取出一定範圍的元素
Pop,從list中刪除元素並同時返回刪除的值,可以在左邊或右邊操作.

LPUSH list1 A 
LPUSH list1 B 
LPUSH list1 C
RPUSH list1 D
 
查看列表的長度:
LLEN list1

查看列表的內容:
db01:6379> LRANGE list1 0 -1
1) "C"
2) "B"
3) "A"
4) "D"

刪除列表元素:
LPOP: 從列表左側刪除
RPOP: 從列表右側刪除

LPOP list1 
RPOP list1

刪除列表內容:
DEL list1

哈希

Hash看起來就像一個hash的樣子.由鍵值對組成
HMSET指令設置hash中的多個域
HGET取回單個域.
HMGET取回一系列的值

生成一個hash類型:
HMSET user:1 name xiaozhang job it age 28
HMSET user:2 name abc job it age 28
HMSET user:3 name def job it age 28

查看hash里的一個值
HMGET user:1 name

查看hash里的多個值
HMGET user:1 name age job

查看hash里的所有的值
HGETALL user:1

mysql數據和redis哈希對比:
user表

uid  name       job  age 
1    xiaozhang  it   28 
2    xiaoya     it   28 
3    yazhang    it   28 

mysql查詢數據
select * from user where id = 3

redis緩存mysql數據
名字  key1 k1值 key2 k2的值 key3 k3的值
uid:1 name xiaozahng job it age 28
uid:2 name xiaoya job it age 28
uid:3 name yazahng job it age 28

集合

  • 集合是字元串的無序排列
  • SADD指令把新的元素添加到set中
  • 和list類型不同,set集合不允許出現重覆的元素
  • srem用來刪除指定的值
  • sdiff計算後者集合的差異成員
  • sinter計算集合的交集
  • sunion計算集合的並集
創建集合
db01:6379> SADD set1 1 2 3
(integer) 3
db01:6379> SADD set2 1 3 5 7
(integer) 4

查看集合的成員:
db01:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
db01:6379> SMEMBERS set2
1) "1"
2) "3"
3) "5"
4) "7"

db01:6379> srem set1 2 4
(integer) 2
db01:6379> smembers set1
1) "1"
2) "3"

查看集合的差集,以前面一個集合為基準對比後面的,前面有,後面沒有則選出來
db01:6379> SDIFF set1 set2
1) "2"
db01:6379> SDIFF set2 set1
1) "7"

查看集合的交集
db01:6379> SINTER set1 set2
1) "1"
2) "3"
3) "5"

查看集合的並集
db01:6379> SUNION set1 set2
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
db01:6379> SUNION set1 set2 set3
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
6) "9"

有序集合添加成員

zadd key score member [score member]

zadd linux5 100 banzhang
zadd linux5 99  xuewei 10 zuzhang 150 mage 

計算成員個數
zcard linux5

計算某個成員分數
zscore key member 

zscore linux5 banzhang 


計算成員排名
zrank key member    
zrevrank key member

升序排行 zrank linux5 xuewei            
降序排行 zrevrank linux5 xuewei


刪除成員
zrem key member
zrem user:ranking oldzhang


增加成員分數
zincrby key increment member

zincrby linux5 1 xuewei 


返回指定排名範圍的成員
升序 zrang      key start end [wishscores]   
降序 zrevrange key start end [wishscores]

127.0.0.1:6379> ZRANGE linux5 0 -1 withscores
1) "c"
2) "10"
3) "b"
4) "99"
5) "a"
6) "100"
7) "d"
8) "150"
127.0.0.1:6379> ZREVRANGE linux5 0 -1 withscores
1) "d"
2) "150"
3) "a"
4) "100"
5) "b"
6) "99"
7) "c"
8) "10"



返回指定分數範圍的成員
zrangebyscore    key min max [wishscores] [limit offect count]
zrevrangebyscore key max min [wishscores] [limit offect count]

zrangebyscore     linux5 100 200 withscores
ZREVRANGEBYSCORE  linux5 200 99 withscores

返回指定分數範圍成員個數
zount key min max 
zcount linux5 100 200 

systemd管理redis

cat >/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /opt/redis_6379/conf/redis_6379.conf --daemonize yes
ExecStop=/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • TAMU是由瑞典烏普薩拉的Ångström航空航天公司(ÅAC)開發的高級磁力計子系統。TAMU的目的是提供地球磁場的磁力計數據,以便與子畫面觀測相關。實驗性TAMU由使用領先技術製造的四種類型的設備組成:3軸地磁感測器,通過3D封裝系統技術製造的MPU晶元,製造的4Mbit MRAM(磁性隨機存取 ...
  • 1.查看防火牆狀態 查看防火牆狀態 systemctl status firewalld 開啟防火牆 systemctl start firewalld 關閉防火牆 systemctl stop firewalld 開啟防火牆 service firewalld start 若遇到無法開啟 先用:s ...
  • 本文轉載自:小豆芽博客 一、對CPU進行簡單測試: 1、通過bc命令計算特別函數 例:計算圓周率 echo "scale=5000; 4*a(1)" | bc -l -q MATH LIBRARY If bc is invoked with the -l option, a math library ...
  • 眾所周知,i.MXRT系列內部沒有非易失性存儲器,但內部SRAM還是必備的,這個SRAM可用於存放data、Stack、Heap段或者Non-XIP代碼text段等。我們知道Cortex-M7架構引入了TCM屬性的靜態記憶體,以Cortex-M7為內核的i.MXRT當然要支持TCM,除了TCM之外,i... ...
  • 前言 一邊有一個經常引誘我讓我“娛樂至死”的視頻,還有一個不停“鞭策“我讓我快點學習的大BOSS。正是有這兩種 才讓我常常在自信中明白自己努力的方向。嗯,"人間不值得"! SCHEMA.XML介紹 上一篇寫了:資料庫中間件DBLE學習(一) 基本介紹和快速搭建,主要介紹快速安裝。在安裝的過程中,我們 ...
  • select count(1) from 表a //查詢時會對常數列進行統計行數select count(*) from 表a //查詢時會找表a中最短的列進行統計行數 因為使用count(*)查詢會有一個找尋最短列的過程,從效率上講會慢一些,雖然不明顯,但是一般我們使用count(1)查詢就可以了 ...
  • 先導知識:Memcache Memcache是一個高性能的分散式記憶體對象緩存系統,代碼類似於Hash。 已經有了Memcache,為什麼還要用Redis呢? 下麵Memcache的缺點: 不支持數據持久化存儲 不支持主從 不支持分片 而對比Redis資料庫,以上三點都支持,所以要使用redis。 問 ...
  • 本文主要針對中小型應用或網站,重點探討日常程式開發中SQL語句的優化問題,所謂“大數據”、“高併發”僅針對中小型應用而言,專業的資料庫運維大神請無視。以下實踐為個人在實際開發工作中,針對相對“大數據”和相對“高併發”場景的一些應對策略,部分措施並沒有經過嚴格的對比測試和原理分析,如有錯漏歡迎各種批評 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...