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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...