主頁 > 資料庫 > redis初識

redis初識

2020-09-13 17:53:20 資料庫

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/26236.html

標籤:NoSQL

上一篇:Hbase架構剖析

下一篇:基于Docker的Consul集群實作服務發現

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more