欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫 分布式Redis詳解

柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫 分布式Redis詳解

http://yzkb.51969.com/

目錄

前言安裝redis的倆種方法Redis 與 MySQL的區(qū)別Redis可以實(shí)現(xiàn)那些功能Redis常用的數(shù)據(jù)類型有序列表的底層是如何實(shí)現(xiàn)的?什么是跳躍表

Redis在Spring中的使用Redis 中為什么單線程比多線程快Redis的分布式鎖如何實(shí)現(xiàn)Redis 分布式鎖可能出現(xiàn)的問題Redis保持?jǐn)?shù)據(jù)不丟失的方式AOF持久化序列的方式有哪些Redis 的內(nèi)存淘汰策略有哪些

前言

Redis我們最近學(xué)習(xí)必備工具之一了, 接下來我們將講解Redis的簡單應(yīng)用 ,以及相關(guān)原理

安裝redis的倆種方法

第一種: 在Linux上安裝Redis

yum -y install redis

啟動Redis

redis-server /etc/redis.conf &

鏈接Redis

redis-cli

出現(xiàn)這個(gè)說明鏈接成功了

簡單的讀和取數(shù)據(jù) 設(shè)置遠(yuǎn)程鏈接

將redis的配置文件下載到本地: 配置文件是Linux底下的 /etc/redis.conf 目錄

cd /etc 進(jìn)入目錄

下載文件

sz redis.conf

查找文件中的bind 127.0.0.1 將找到的這一行注釋掉(ctrl + F 查找快捷鍵)

4. 將redis.conf 中的protected-mode yes 中的yes 改為no 5. 保存文件,將修改后的文件在上傳到Linux中etc 的目錄下 6. 使用命令 redis-cli shutdown 先關(guān)閉redis 服務(wù) ,再使用 redis-server /etc/redis.conf & 啟動redis命令 7. 最后,如果不能遠(yuǎn)程訪問, 請?jiān)囍榭捶?wù)器是否開放了6379的端口號 第二種 在Windows中安裝 Redis

Redis 與 MySQL的區(qū)別

MySQL : 是關(guān)系型數(shù)據(jù)庫 Redis : 是文檔型數(shù)據(jù)庫 (以鍵值對的方式存儲)(也叫非關(guān)系型數(shù)據(jù)庫)

關(guān)系型數(shù)據(jù)局庫描述的是對象與對象之間的關(guān)系 而文檔型數(shù)據(jù)庫中 , 沒有關(guān)系,是動態(tài)的,所有內(nèi)容都在一塊, 增加刪除數(shù)據(jù)不影響之前的數(shù)據(jù),所以說Redis天然支持分布式

舉個(gè)例子 我們都知道session 信息, 一般是存儲在服務(wù)器中的 ,而加入有多臺服務(wù)器的話, session還是存儲在每個(gè)服務(wù)器中, 那么就意味著一個(gè)用戶, 每次訪問不同的服務(wù)器(物理上的多臺),就必須重新驗(yàn)證一下session , 這不得煩死. 而Redis就 向一個(gè)安檢門一樣, 你在我這里驗(yàn)證一次, 無論進(jìn)那臺服務(wù)器都不需要再次驗(yàn)證了 , 這就是分布式

Redis可以實(shí)現(xiàn)那些功能

會話存儲 -也就是上面我們說的存儲session存儲緩存 - 這個(gè)也很好理解: 我們的服務(wù)器可以不停的買, 然后來突破單臺服務(wù)器的瓶頸, 但是我們的數(shù)據(jù)庫怎么辦呢? 所以在企業(yè)中數(shù)據(jù)庫是最容易達(dá)到瓶頸的 ,雖然我們可以分庫分表, 但是這樣的庫 和表過多的時(shí)候 ,我們查詢的效率無疑會大大降低, 這時(shí)候 ,就需要將數(shù)據(jù)庫的一部分?jǐn)?shù)據(jù) 添加到Redis中的緩存中, 讓服務(wù)器查詢數(shù)據(jù)的時(shí)候先去緩存中查詢, 查不到再去數(shù)據(jù)庫中查, 這樣就大大提高了數(shù)據(jù)庫查詢的效率實(shí)現(xiàn)分布式鎖 - 與存儲會話功能一樣 ,是換個(gè)用途簡單的消息隊(duì)列

Redis常用的數(shù)據(jù)類型

String字符串類型

Redis支持的字符串類型不是定長分配的字符串,是動態(tài)變長字符串,修改字符串在沒有增加特別多內(nèi)容的情況下不需要重新分配內(nèi)存空間,

字符串類型常用的場景有以下這些: (1)緩存結(jié)構(gòu)體信息: (2)計(jì)數(shù)功能:

List列表類型

常用使用場景 (1)list列表結(jié)構(gòu)常用來做異步隊(duì)列使用 (2)list可用于秒殺搶購場景

Hash數(shù)據(jù)類型

常用使用場景 (1)保存結(jié)構(gòu)體信息 Set集合類型 用在一些去重的場景里 Zset有序集合 常用使用場景 (1)各類熱門排序場景

有序列表的底層是如何實(shí)現(xiàn)的?

答:當(dāng)數(shù)據(jù)比較少時(shí),有序集合是壓縮列表ziplist實(shí)現(xiàn)的,反之則為跳躍表skiplist實(shí)現(xiàn)。使用壓縮列表存儲必滿足以下兩個(gè)條件: 1有序集合保存的元素個(gè)數(shù)要小于128個(gè); 2有序集合保存的所有元素成員的長度都必須小于64字節(jié)。 如果不能滿足以上兩個(gè)條件中的任意一個(gè),有序集合將會使用跳躍表skiplist結(jié)構(gòu)進(jìn)行存儲。

什么是跳躍表

答:跳躍表SkipList,也稱之為跳表,是一種數(shù)據(jù)結(jié)構(gòu),用于在有序元素的集合中進(jìn)行高效的查找操作。它通過添加多層鏈表的方式,提供了一種以空間換時(shí)間的方式來加速查找。 跳躍表由一個(gè)帶有多層節(jié)點(diǎn)的鏈表組成,每一層都是原始鏈表的一個(gè)子集。最底層是一個(gè)完整的有序鏈表,包含所有元素。每個(gè)更高層級都是下層級的子集,通過添加額外的指針來跳過一些元素。這些額外的指針稱為“跳躍指針”,它們允許快速訪問更遠(yuǎn)的節(jié)點(diǎn),從而減少了查找所需的比較次數(shù)。 跳躍表的平均查找時(shí)間復(fù)雜度為O(logn),其中n是元素的數(shù)量。這使得它比普通的有序鏈表具有更快的查找性能,并目與平衡二叉搜索樹(如紅黑樹)相比,實(shí)現(xiàn)起來更為簡單。

目錄

前言安裝redis的倆種方法Redis 與 MySQL的區(qū)別Redis可以實(shí)現(xiàn)那些功能Redis常用的數(shù)據(jù)類型有序列表的底層是如何實(shí)現(xiàn)的?什么是跳躍表

Redis在Spring中的使用Redis 中為什么單線程比多線程快Redis的分布式鎖如何實(shí)現(xiàn)Redis 分布式鎖可能出現(xiàn)的問題Redis保持?jǐn)?shù)據(jù)不丟失的方式AOF持久化序列的方式有哪些Redis 的內(nèi)存淘汰策略有哪些

Redis在Spring中的使用

添加依賴

org.springframework.boot

spring-boot-starter-data-redis-reactive

配置全局文件

# 設(shè)置redis的相關(guān)信息

# 鏈接那臺redis : 這里攔截的是本地的 - 要開啟服務(wù)

spring.redis.host = 127.0.0.1

# redis的端口號 : 默認(rèn)是6379

spring.redis.port = 6379

# 密碼沒有就空著, 也可以不寫

spring.redis.password=

# 默認(rèn)是16個(gè)庫

spring.redis.database = 1

#以上是最關(guān)鍵的配置, 其他可以不設(shè)置

使用Redis來讀取

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class TestController {

@Autowired

private RedisTemplate redisTemplate;// 自動裝配

@RequestMapping("/serval")

public void setval(String val){

redisTemplate.opsForValue().set("test",val);//得到操作redis的類型,(String)

}

@RequestMapping("/getval")

public String getval(){

return (String) redisTemplate.opsForValue().get("test");

}

}

Redis 中為什么單線程比多線程快

Redis使用鍵值對的方式存儲數(shù)據(jù), 所以查詢的時(shí)候很快, 單線程效率完全夠用, 如果引入多線程的話, 多個(gè)線程搶占一個(gè)操作的事情就會發(fā)生, 結(jié)果效率反而會變慢

Redis的分布式鎖如何實(shí)現(xiàn)

前提啟動redis 使用 setnx lock true 命令實(shí)現(xiàn), 如果出現(xiàn)1 則表示加鎖成功 , 如果出現(xiàn)0 則表示加鎖失敗 使用 del lock 釋放鎖 當(dāng)一個(gè)線程加鎖的時(shí)候, 其他線程再去嘗試加鎖就會失敗

Redis 分布式鎖可能出現(xiàn)的問題

1: 死鎖 Redis分布式鎖可能出現(xiàn)死鎖, 在什么場景下呢. 就是當(dāng) 一個(gè)線程給Redis加上鎖之后 ,經(jīng)歷停電, 或是線程崩潰等情況, 那么Redis的鎖就釋放不掉了,形成了死鎖 (在Redis中默認(rèn)是持久占用的), 解決方案: 給Redis加上超時(shí)時(shí)間(也是Mysql的解決方法) , 但是 如果 先獲取到鎖在去設(shè)置超時(shí)時(shí)間 , 這樣就變成了倆步操作了 , 依然可能出現(xiàn)問題, Redis 給我們提供了一條原子命令來 完成這倆個(gè)操作, 這樣倆個(gè)步驟合二為一, 就解決了死鎖的問題

set lock true ex 30 nx 這里解釋下含義 , ex 是設(shè)置超時(shí)時(shí)間 ,nx 是為元素非空判斷,用來判斷是否能正確使用鎖

2: 誤刪 那誤刪又是一種什么情況呢, 假設(shè)有這么一種情況, 一個(gè)線程 上鎖 并 設(shè)置了超時(shí)時(shí)間, 但是 當(dāng)這個(gè) 線程 過了超時(shí)時(shí)間還在使用, 在這個(gè)線程A還在使用的時(shí)間段中, 線程B 也上鎖了 并且鎖的名稱與線程A之前設(shè)置鎖的名稱一樣, 那么當(dāng)線程A 工作結(jié)束, 釋放鎖的時(shí)候, 就有可能 釋放掉線程B加的鎖. 解決方案 : 給鎖加上 版本號 ? 也是ABA問題版本號的解決方案)(也就是給每個(gè)鎖都加上一個(gè)版本號, 釋放鎖的時(shí)候, 先判斷一下是不是同一個(gè)鎖的版本) 1: 使用 lua 腳本,來設(shè)置倆個(gè)操作的原子性 2: 使用Redisson 框架,(底層也是Lua .只是給你封裝了)

Redis保持?jǐn)?shù)據(jù)不丟失的方式

1: 快照方式 - RDB : 將某一個(gè)時(shí)刻的內(nèi)存數(shù)據(jù), 都寫入到硬盤之中 : 缺點(diǎn) - 效率低 2: 追加方式- AOF : 記錄所有的操作命令(除了查詢操作) , 然后以文本的方式追加到文件中 : 缺點(diǎn) - 有時(shí)會記錄很多更新數(shù)據(jù), 是無用數(shù)據(jù) 3: 混合方式 - 結(jié)合了 RDB 和 AOF 的優(yōu)點(diǎn),在寫入的時(shí)候,先把當(dāng)前的數(shù)據(jù)以 RDB 的形式寫入文件的開頭,再將后續(xù)的操作命令以 AOF 的格式存入文件,這樣既能保證 Redis 重啟時(shí)的速度,又能減低數(shù)據(jù)丟失的風(fēng)險(xiǎn)

AOF持久化序列的方式有哪些

1: always : 每天Redis的命令都寫入硬盤, 最多丟失一條數(shù)據(jù) 2: everysec : 每秒鐘寫入一次硬盤, 最多丟失一秒數(shù)據(jù)(默認(rèn)持久化策略) 3:no : 不設(shè)置,寫入硬盤的規(guī)則,有當(dāng)前的操作系統(tǒng)決定什么時(shí)候?qū)懭?, Linux默認(rèn)30s

Redis 的內(nèi)存淘汰策略有哪些

這里簡單介紹集中常用的 1: noeviction : 不淘汰任何數(shù)據(jù), 當(dāng)內(nèi)存不足的時(shí)候, 新增操作會報(bào)錯(cuò)(默認(rèn)策略) 2: allkeys - lru : 淘汰最久未使用的鍵值 3: volite - lru : 淘汰所有設(shè)置了過期時(shí)間的, 最久未使用的鍵值

柚子快報(bào)邀請碼778899分享:數(shù)據(jù)庫 分布式Redis詳解

http://yzkb.51969.com/

推薦閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19267823.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄