国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Redis】Redis 的學(xué)習(xí)教程(一)入門基礎(chǔ)

這篇具有很好參考價值的文章主要介紹了【Redis】Redis 的學(xué)習(xí)教程(一)入門基礎(chǔ)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 簡介

Redis 全稱:Remote Dictionary Server(遠程字典服務(wù)器),是一款開源的,遵守 BSD 協(xié)議,使用 C 語言開發(fā)的 key-value 存儲系統(tǒng)。簡單的說,它是一款跨平臺的非關(guān)系型數(shù)據(jù)庫,支持優(yōu)先內(nèi)存存儲,并提供多種語言的 API 客戶端

雖然開源軟件市場上也有很多優(yōu)秀的緩存服務(wù)中間件,比如 Memcache,但是和 Redis 對比起來,Redis 還是顯得格外的突出,優(yōu)勢如下:

  1. 性能極高:Redis 能讀的速度是 110000 次/s,寫的速度是 81000次/s
  2. 數(shù)據(jù)類型豐富:支持 String,Hash,List,Set,Sorted Set 等數(shù)據(jù)類型的操作
  3. 支持原子性操作:Redis 的每條命令操作都是原子性的,Redis 的操作之所以是原子性的,是因為每條命令的執(zhí)行都是單線程的,不存在線程競爭問題
  4. 存儲方式多樣化:memecache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉;redis 支持數(shù)據(jù)的持久化,同時也支持數(shù)據(jù)的備份,即 master-slave 模式的數(shù)據(jù)備份
  5. 功能豐富:Redis 還支持 publish/subscribe,通知,key 過期等等特性

在分布式的架構(gòu)環(huán)境下,Redis 基本上是缺一不可的緩存中間件,它能很好的解決服務(wù)與服務(wù)之間數(shù)據(jù)共享的問題,并且性能不受影響

2. 服務(wù)安裝

因為 Redis 目前官方只支持 LINUX 系統(tǒng),因此沒有 Windows 版本的軟件包,但是好在微軟團隊維護了開源的 windows 版本,雖然更新不算及時,但是對于普通測試使用足夠了。

Redis Windows 版下載地址

windows 版安裝教程

3. Redis 的常用操作命令

3.1 公共命令

// 1.客戶端連接 redis
redis-cli -h localhost -p 6379
// 2.切換數(shù)據(jù)庫
select 3
// 3.查看 DB 大小
DBSIZE
// 4.查看 DB 中所有的 key
keys *
// 5.清空當(dāng)前數(shù)據(jù)庫
flushdb
// 6. 清空全部數(shù)據(jù)庫內(nèi)容
flushdb

3.2 Key 的命令

keys *           # 查看所有的 key
exists key       # 判斷某個 key 是否存在
move key 1       # 移除某個 key 1 表示當(dāng)前數(shù)據(jù)庫
expire key 10    # 給 key 設(shè)置過期時間(10s)
persist key      # 移除 key 的過期時間
ttl key 		 # 查看 key 的過期時間(s)
type key 		 # 查看 key 對應(yīng)的 value 的類型

3.3 String 命令

set key value 		# 給 key 設(shè)置 value
get key 			# 獲取 key 對應(yīng)的 value
exists key 			# 判斷key 是否存在
append key value 	# 如果 key 存在,則追加;否則,相當(dāng)于 set 命令
strlen key 
incr key 			# 自增 1
decr key 			# 自減
incrby key step 	# 設(shè)置步長
decrby key step
getrange key startIndex stopIndex 	# 截取字符串(下標從0開始)
setrange key index value			# 將索引對應(yīng)的值替換成value
setex key time value 				# 設(shè)置key為value,并且設(shè)置過期時間time(s)
setnx key value 					# 如果 key 不存在,就設(shè)置
mset k1 v1 k2 v2 					# 批量設(shè)置
mget k1 k2 							# 批量獲取
msetnx 								# 批量設(shè)置(原子操作)
getset key value 					# 先 get,再 set

String 的應(yīng)用場景:

  • 計數(shù)器
  • 統(tǒng)計數(shù)量
  • 粉絲數(shù)
  • 對象緩存

3.4 List 命令

lpush list value1 [value2] 		# 將一個值(或多個值)添加到 list 的頭部(左)
lpop list 						# 移除 list 頭部的值(左)
lrange list lIndex rIndex 		# 獲取 list 中的某個范圍的值
lindex list index 				# 通過下標獲取值(左)
llen list 						# 獲取 list 的長度
lrem list count value 			# 移除 list 中 count 個 value
ltrim list lIndex rIndex 		# 通過下標返回部分 list
rpoplpush list list2 			# 移除 list 中最后一個元素,并將它添加到 list2 中去
exists list 					# 判斷 list 是否存在
lset list index value 			# 將 list 中下標為 index 的值修改為 value
linsert list before|after pivot value # 往 list 中在某個元素 pivot 之前|后插入value
?
rpush list value 				# 將一個值(或多個值)添加到 list 的尾部(右)
rpop list 						# 移除 list 尾部的值(右)

list 實際上是一個鏈表:before Node after,left、right 都可以插值
兩邊插入或修改,效率最高
消息隊列(lpush、rpop)、棧(lpush、lpop)

3.5 Set 命令

sadd set value1 [value2] 		# 給 set 設(shè)置值
smembers set 					# 查看 set 中的成員
sismember set value 			# 查看 set 中是否有 value
scard set 						# 獲取 set 中元素的個數(shù)
srem set value 					# 移除 set 中指定的 value
srandmember set count 			# 隨機抽選出 count 個元素
spop set 						# 隨機刪除 set 中的元素
sdiff set1 set2 				# 返回 set1、set2 的差集
sinter set1 set2 				# 返回 set1、set2 的交集(共同好友)
sunion set1 set2 				# 返回 set1、set2 的并集

3.6 Hash 命令

hset hash key value 		# 設(shè)置 hash 的一個 key-value
hget hash key 				# 根據(jù) hash 的一個 key,獲取 value
hmset hash key1 value1 key2 value2 	# 設(shè)置 hash 的多個 key-value
hmget hash key1 key2 		# 根據(jù)多個 key 來獲取多個 value
hgetall hash 				# 獲取所有的 key-value
hdel hash key 				# 刪除 hash 中指定的 key
hlen hash 					# 獲取 hash 的長度(有多少個 key-value)
exists hash key 			# 判斷 hash 中某個 key 是否存在
hkeys hash 					# 只獲取 hash 中的所有的 key
hvals hash 					# 只獲取 hash 中的所有的 value
hincrby hash key count 		# 給 hash 中的 key 加 count
hsexnx hash key value 		# 如果 key 存在,則,可以設(shè)置;如果不存在,則,不可以設(shè)置

hash 用來存儲經(jīng)常變更的數(shù)據(jù):user (name、age)
hash 更加適合對象的存儲,string 更加適合字符串的存儲

3.7 ZSet 命令

zadd zset score value 			# 添加一個值
zrangebyscore zset -inf +inf 	# 顯示全部數(shù)據(jù)(負無窮-正無窮)
zrangebyscore zset -inf +inf withsocres # 顯示全部數(shù)據(jù)并且附帶 score
zrange zset 0 -1 withsocres 	# 顯示所有成員及其 score 值
zrange zset 0 -1 				# 顯示全部(正序)
zrevrange zset 0 -1 			# 顯示全部(倒序)
zrem zset value 				# 移除某個 value
zcard zset 						# 返回 zset 中的元素個數(shù)
zcount zset value1 value2 		# 獲取指定成員之間的數(shù)量
zrank zset value				# 返回有序集中指定成員的排名(從小到大)

zset 應(yīng)用于帶權(quán)重的,如:排行榜。

3.8 事務(wù)操作

Redis 也支持事務(wù)操作,Redis 事務(wù)可以一次執(zhí)行多個命令, 并且?guī)в幸韵氯齻€重要的保證:

  1. 批量操作在發(fā)送 EXEC 命令前被放入隊列緩存
  2. 收到 EXEC 命令后進入事務(wù)執(zhí)行,事務(wù)中任意命令執(zhí)行失敗,其余的命令依然被執(zhí)行
  3. 在事務(wù)執(zhí)行過程,其他客戶端提交的命令請求不會插入到事務(wù)執(zhí)行命令序列中

一個事務(wù)從開始到執(zhí)行會經(jīng)歷以下三個階段:

  1. 開始事務(wù):MULTI
  2. 命令入隊:QUEUE
  3. 執(zhí)行/丟棄事務(wù):EXEC 或者 DISCARD

以某個事務(wù)操作為例:我們先以 MULTI 開始一個事務(wù), 然后將多個命令入隊到事務(wù)中, 最后由 EXEC 命令觸發(fā)事務(wù), 一并執(zhí)行事務(wù)中的所有命令。過程如下:
【Redis】Redis 的學(xué)習(xí)教程(一)入門基礎(chǔ),中間件,redis,學(xué)習(xí),數(shù)據(jù)庫

特別注意的地方是:單個 Redis 命令的執(zhí)行是原子性的,但 Redis 沒有在事務(wù)上增加任何維持原子性的機制,所以 Redis 事務(wù)的執(zhí)行并不是原子性的

事務(wù)可以理解為一個打包的批量執(zhí)行腳本,但批量指令并非原子化的操作,中間某條指令的失敗不會導(dǎo)致前面已做指令的回滾,也不會造成后續(xù)的指令不做。

3.9 Lua 腳本操作

在上面我們也介紹到了,Redis 事務(wù)的執(zhí)行并不能完全保證原子性,那么如何將一批命令操作做到原子性操作呢?

==Redis 支持通過 Lua 腳本來實現(xiàn)一批命令原子性操作,==執(zhí)行腳本的常用命令為 EVAL。

Eval 命令的基本語法如下:

EVAL script numkeys key [key ...] arg [arg ...]

參數(shù)含義:

  • script:Lua 5.1版本的腳本,這個腳本并不需要定義一個 Lua 函數(shù)或者說是不應(yīng)該這樣做。它可以僅僅是一個 Lua 語法,這個語法運行在 Redis 服務(wù)器上下文
  • numkeys:Redis鍵的數(shù)量,Lua采用基于數(shù)組形式(KEYS全局變量)訪問這些參數(shù)(KEYS[1]、KEYS[2] …)
  • arg:不代表redis鍵,它們可以通過ARGV全部變量定義的數(shù)組訪問,與KEYS數(shù)組設(shè)置類似,形式為 ARGV[1]、ARGV[2] …

如:

EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second

lua 腳本中調(diào)用 redis 命令

案例1:

給指定的 key 設(shè)置指定值 value,并且設(shè)置過期時間 60 秒,實現(xiàn)原子性操作,如果操作成功就返回 1,否則返回 0

EVAL "if redis.call('setnx', KEYS[1], ARGV[1]) == 1 then return redis.call('expire', KEYS[1], ARGV[2]) else return 0 end" 1 key1 hello 60

案例2:

獲取指定 key 的值,如果存在就刪除 key,實現(xiàn)原子性操作,如果操作成功就返回 1,否則返回 0

EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 key1 hello

4. 可視化客戶端

對于開發(fā)者來說,使用客戶端命令來操作 redis 非常不便捷,因此誕生了很多的基于 redis 的可視化客戶端。如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-658250.html

  1. Redis Desktop Manager 下載地址
  2. medis2(mac 系統(tǒng))下載地址
  3. AnotherRedisDesktopManager Gitee 下載地址 | Github 下載地址
  4. Redis Insight 下載地址
  5. QuickRedis Gitee 下載地址 | Github 下載地址

到了這里,關(guān)于【Redis】Redis 的學(xué)習(xí)教程(一)入門基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 中間件系列 - Redis入門到實戰(zhàn)(高級篇-多級緩存)

    中間件系列 - Redis入門到實戰(zhàn)(高級篇-多級緩存)

    學(xué)習(xí)視頻: 黑馬程序員Redis入門到實戰(zhàn)教程,深度透析redis底層原理+redis分布式鎖+企業(yè)解決方案+黑馬點評實戰(zhàn)項目 中間件系列 - Redis入門到實戰(zhàn) 本內(nèi)容僅用于個人學(xué)習(xí)筆記,如有侵擾,聯(lián)系刪除 學(xué)習(xí)目標 JVM進程緩存 Lua語法入門 實現(xiàn)多級緩存 緩存同步策略 傳統(tǒng)的緩存策略

    2024年02月03日
    瀏覽(63)
  • 中間件系列 - Redis入門到實戰(zhàn)(高級篇-分布式緩存)

    中間件系列 - Redis入門到實戰(zhàn)(高級篇-分布式緩存)

    學(xué)習(xí)視頻: 黑馬程序員Redis入門到實戰(zhàn)教程,深度透析redis底層原理+redis分布式鎖+企業(yè)解決方案+黑馬點評實戰(zhàn)項目 中間件系列 - Redis入門到實戰(zhàn) 本內(nèi)容僅用于個人學(xué)習(xí)筆記,如有侵擾,聯(lián)系刪除 學(xué)習(xí)目標 Redis持久化 Redis主從 Redis哨兵 Redis分片集群 - 基于Redis集群解決單機R

    2024年02月03日
    瀏覽(23)
  • AWS SAP-C02教程5--基礎(chǔ)中間件

    AWS SAP-C02教程5--基礎(chǔ)中間件

    在AWS中除了計算、存儲、網(wǎng)絡(luò)之外,還有一些組件非常重要,包括基礎(chǔ)組件、消息隊列組件、日志組件、編排組件等,接下來就通過分成幾個不同類別(這個分類按照AWS的大概分類進行分類,并無統(tǒng)一標準,只是具備一定相同功能歸類在一起方便記憶) 消息中間件當(dāng)然與我們

    2024年02月08日
    瀏覽(18)
  • 狂神Javaweb完整版基礎(chǔ)入門(IDEA版)值得學(xué)習(xí)的JavaWeb教程

    狂神Javaweb完整版基礎(chǔ)入門(IDEA版)值得學(xué)習(xí)的JavaWeb教程

    Java web web開發(fā): web,網(wǎng)頁的意思,www.baidu.com 靜態(tài)web html,css 提供給所有人看的數(shù)據(jù)始終不會發(fā)生變化! 動態(tài)web 淘寶,幾乎是所有的網(wǎng)站 提供給所有的人看的數(shù)據(jù)始終會變化,每個人在不同的時間,不同的地點看到不同的信息 技術(shù)棧:Servlet/Jsp,ASP,PHP 在Java中,動態(tài)web資

    2024年02月06日
    瀏覽(49)
  • python教程 入門學(xué)習(xí)筆記 第3天 編程基礎(chǔ)常識 代碼注釋 變量與常量

    編程基礎(chǔ)常識 一、注釋 1、對代碼的說明與解釋,它不會被編譯執(zhí)行,也不會顯示在編譯結(jié)果中 2、注釋分為:單行注釋和多行注釋 3、用#號開始,例如:#這是我的第一個python程序 4、注釋可以寫在單獨一行,也可以寫在一句代碼后面 5、不想執(zhí)行編譯,又不能刪除的代碼,可

    2024年02月14日
    瀏覽(94)
  • 【ESP8266教程】零基礎(chǔ)入門學(xué)用物聯(lián)網(wǎng)-基礎(chǔ)知識篇(太極創(chuàng)客團隊)學(xué)習(xí)筆記

    【ESP8266教程】零基礎(chǔ)入門學(xué)用物聯(lián)網(wǎng)-基礎(chǔ)知識篇(太極創(chuàng)客團隊)學(xué)習(xí)筆記

    提示:這里可以添加本文要記錄的大概內(nèi)容: 例如:隨著人工智能的不斷發(fā)展,機器學(xué)習(xí)這門技術(shù)也越來越重要,很多人都開啟了學(xué)習(xí)機器學(xué)習(xí),本文就介紹了機器學(xué)習(xí)的基礎(chǔ)內(nèi)容。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 ????????NodeMCU上的D2引腳引出ESP82

    2024年04月29日
    瀏覽(70)
  • 【Redis】Redis 的學(xué)習(xí)教程(五)之 SpringBoot 集成 Redis

    【Redis】Redis 的學(xué)習(xí)教程(五)之 SpringBoot 集成 Redis

    在前幾篇文章中,我們詳細介紹了 Redis 的一些功能特性以及主流的 java 客戶端 api 使用方法。 在當(dāng)前流行的微服務(wù)以及分布式集群環(huán)境下,Redis 的使用場景可以說非常的廣泛,能解決集群環(huán)境下系統(tǒng)中遇到的不少技術(shù)問題,在此列舉幾個使用 Redis 經(jīng)常用到的功能: 分布式緩

    2024年02月12日
    瀏覽(25)
  • 【Redis】Redis 的學(xué)習(xí)教程(七)之 SpringBoot 集成 Redis

    【Redis】Redis 的學(xué)習(xí)教程(七)之 SpringBoot 集成 Redis

    在前幾篇文章中,我們詳細介紹了 Redis 的一些功能特性以及主流的 java 客戶端 api 使用方法。 在當(dāng)前流行的微服務(wù)以及分布式集群環(huán)境下,Redis 的使用場景可以說非常的廣泛,能解決集群環(huán)境下系統(tǒng)中遇到的不少技術(shù)問題,在此列舉幾個使用 Redis 經(jīng)常用到的功能: 分布式緩

    2024年02月10日
    瀏覽(20)
  • 【Redis】Redis 的學(xué)習(xí)教程(十二)之在 Redis使用 lua 腳本

    lua 菜鳥教程:https://www.runoob.com/lua/lua-tutorial.html 在 Redis 使用 lua 腳本的好處: 減少網(wǎng)絡(luò)開銷 ??梢詫⒍鄠€請求通過腳本的形式一次發(fā)送,減少網(wǎng)絡(luò)時延及開銷 原子性操作 。Redis會將整個腳本作為一個整體執(zhí)行,中間不會被其他請求插入。因此在腳本運行過程中無需擔(dān)心會出

    2024年02月07日
    瀏覽(22)
  • 中間件redis的使用

    Java中的中間件配置體現(xiàn)在springboot的yml配置文件中。Springboot框架支持微服務(wù)和中間件和restful api遠程服務(wù)的調(diào)用。中間件是Java web系統(tǒng)的中間層的服務(wù)系統(tǒng)的調(diào)用接口。Springboot的自動裝配和約定大于配置機制初始化springcontext的容器空間和注冊組件。使用容器管理服務(wù)注冊對象

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包