Redis:redis基礎

Redis

Remote Dictionary Service即遠程字典服務

一個基于內存的key-value結構數據庫,在開發中常常作為緩存存儲不經常被改變的數據

基于內存存儲,讀寫性能高

在企業中應用廣泛

Redis介紹

用C語言開發的開源高性能鍵值對數據庫,可以達到10w+的qps,可以存儲豐富的value類型,被稱為結構化的nosql數據庫

Nosql:(Not Only Sql),泛指非關系型數據庫(數據和數據之間沒有聯系)

是關系型數據庫的補充

關系型數據庫(RDBMS)

Mysql

Oracle

DB2

SQLServer

非關系型數據庫(NoSql)

Redis

Mongo db

MemCached

Redis的作用

數據緩存:將數據緩存到redis中

消息隊列

Redis的啟動

前端模式啟動(不使用)

直接運行bin/redis-server,缺點是啟動完成后不能再進行任何操作除非使用ctrl+c退出

后端模式(推薦)

先修改redis.conf配置文件,修改daemonize 為yes

daemonize:后臺運行

在啟動時指定配置文件運行

./redis-server redis.conf
redis啟動客戶端
./redis-cli

Redis的終止

在redis客戶端中輸入
shutdown

Windows中Redis的啟動和終止(僅了解)

直接打開redis-server.exe啟動redis服務

默認端口號為6379

ctrl+c停止服務

打開redis-cli.exe啟動redis客戶端,默認連接本地Redis服務,且不需要認證即可連接成功

使用可視化工具連接redis服務器端

redis-desktop-manager

安裝過程略,端口號默認6379

如果需要允許其他機器進行訪問需要配置redis.conf進行內容配置

添加當前linux局域網的ip地址

切換redis數據庫
select 數據庫索引

注:一個redis服務器中可以包含多個數據庫,客戶端可以只連接Redis中的某個數據庫

Redis中有db0-db15的16個數據庫,不能被刪除也不能新建,數據庫中沒有表結構,客戶端默認連接第0個數據庫

Redis的數據類型

redis的value支持五種數據類型

key必須為String類型,用以表示存儲的數據

命名規則:

不能太長避免查詢效率低

不能太短避免重復

value支持五種數據類型,表示存儲的數據

string:字符串

hash:鍵值對

list:列表類型,存取有序,可以重復

set:集合類型,存取無需,不可重復

sorted set/zset :有序集合類型,每個元素有一個分數用以決定順序

string類型

Redis中最基礎的數據類型

字符串,整數,浮點類型都以字符串寫入

最多容納512m

常用命令
set 鍵 值
//添加或修改一個鍵值對
get 鍵
//根據鍵獲取值,不存在返回nil(c語言中的null)
del 鍵
//刪除指定鍵值對,返回刪除個數
SETEX key seconds value 
//設置指定key的值,將key的過期時間設為seconds秒,
//即SET key value ex seconds
EXPIRE key seconds
//如果一個key存在,設置過期時間
SETNX key value/set key value nx
//保存鍵值對,如果key存在則不保存mset name lisi addr sh
批量添加name為lisi addr為sh
mget name age addr
批量獲取name,age,addr的值
del name age
批量刪除name age

hash類型操作命令

Redis中的hash類型可以看成鍵值均為String類型的Map容器

每個Hash中可以保存2^32-1個鍵值對

常用命令
hset 鍵 字段 值
//添加鍵,字段,值
hget 鍵 字段
//通過鍵,字段得到值
hmset 鍵 字段 值 字段 值
//multiply多個,一次添加多個字段和值
hmget 鍵 字段 字段
//通過鍵,獲取多個字段和值
hdel 鍵 字段 字段
//刪除一個或多個字段的值
hgetall 鍵
//得到這個鍵下所有的字段和值
HKEYS 鍵
//獲取哈希表中所有字段
HVALS 鍵
//獲取哈希表中所有值

list類型

在Redis中list類型時按照插入順序排序的字符串鏈表,可以在左側和右側添加新元素

如果該鍵不存在就會創建這個鍵對應的鏈表

如果鍵對應的鏈表沒有元素就會將鍵也移除

list可以包含的元素為2^32-1個

常用命令
lpush 鍵 元素 元素
//從左邊向指定的鍵中添加一個或多個元素,返回元素個數
rpush 鍵 元素 元素
//從右邊向指定的鍵中添加一個或多個元素,返回元素個數
l/rpop 鍵
//從左/右側刪除一個元素,返回被刪除的元素
lrange 鍵 開始 結束
//得到鍵中指定范圍的元素的數據
從左到右的索引為0-n
從右到左的索引為-1-(-(n+1))
所以從左到最后一個即為0--1
lindex 鍵 索引值
//查詢指定索引的元素
llen 鍵
//獲取列表的長度
BRPOP key1 [key2] timeout
//移出并獲取列表的最后一個元素,如果列表沒有元素就會阻塞隊列直到有元素或超時
LREM key 刪除元素個數 value值
//從表頭刪除指定個數的元素

Set類型

沒有排序的字符集合,不可重復

可包含的最大元素數量為2^32-1個

常用命令
sadd 鍵 元素 元素
//向一個鍵中添加一個或多個元素
smemers 鍵
//得到這個集合中所有的元素
sismember 鍵 元素
//判斷指定的元素在集合中是否存在,存在返回1,不存在返回0
srem 鍵 元素 元素
//通過鍵刪除一個或者多個元素
sinter key1 [key2]
//返回給定所有集合的交集(集合中共有的部分)

Zset/sorted set類型

sorted set有序集合

和set集合類似,但每個元素會關聯一個分數作為排序因子

通過分數進行從小到大的排序

集合成員唯一但分數可以重復

常用命令
zadd 鍵 分數 值 分數 值
//添加一個或多個元素,每個元素都有一個分數
zincrby key increment member
//對指定元素的分數進行增減操作
zrange 鍵 開始索引 結束索引
//獲取指定范圍的元素,得到所有元素,索引為0到-1
zrange 鍵 開始索引 結束索引 withscores
//查詢指定元素和對應的分數
zrevrange 鍵 開始索引 結束索引 withscores
//按照分數倒序獲取指定的元素和對應的分數
zrem 鍵 值 值
//刪除一個或者多個值
zcard 鍵
//得到元素個數
zrank 鍵 值
//得到元素的索引號
zscore 鍵 值
//得到元素的分數

Redis通用命令

keys 匹配字符
//查詢所有的鍵,可以使用通配符
//*匹配多個字符
//?匹配一個字符
del 鍵1 鍵2
//刪除任何的值類型且可以同時刪除多個鍵
exists鍵
//判斷鍵是否存在,不存在返回0,存在返回1
type鍵
//判斷指定鍵的值類型,返回類型名字
select數據庫編號
//選擇其他數據庫
move鍵數據庫編號
//將當前數據庫中指定的鍵移動到另一個數據庫中
TTL key
//返回給定key的剩余生存時間(TTL,time to live),以秒為單位
從Redis2.8開始
key不存在或已過期:-2
key存在或者沒有設置過期時間:-1
flushall
//清空redis所有庫(不推薦)

Java中操作Redis

Redis的java客戶端

jedis

lettuce

redisson

Jedis

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version>
</dependency>
Jedis類的常用方法

方法名即為redis中的命令名

方法參數即為命令參數

每次訪問Redis數據庫時都需要創建一個jedis對象

請添加圖片描述

Spring Data Redis

Spring的一部分,在Spring應用中通過簡單的配置即可訪問Redis服務,高度封裝了Redis底層開發包

@Autowired
private RedisTemplate<String,String> redisTemplate;
//注入redisTemplate@Autowired
private StringRedisTemplate stringRedisTemplate
//redisTemplate的子類,避免寫泛型ValueOperations<String,String> vop = redisTemplate.opsForValue();
//根據redisTemplate獲取操作String類型數據的對象
可以使用stringRedisTemplate

Redis持久化機制

服務端關閉會使數據部分丟失

因為redis服務器默認每隔一段時間才會寫入一次內存數據到硬盤上

redis的持久化

因為redis的數據在ram上存儲,所以斷電就會丟失

所以需要保存到硬盤上做持久化操作

支持兩種持久化方式:

RDB(快照)方式(默認)

將數據以快照方式寫入二進制文件

默認文件名為dump.rdb

可以通過配置進行自動快照持久化

需要設置兩個條件

時間和修改鍵數,當兩個條件都滿足時就會觸發快照

優點:

持久化效率高

數據庫宕機后數據恢復效率更高

缺點:

仍然可能出現數據丟失,如果在持久化之前出現宕機,就會丟失數據

AOF的存儲方式

將每一個收到的寫命令通過write函數追加到文件中

重啟時會全部執行來進行重建

有三種同步策略

每秒同步
每次同步
不同步
優點:

AOF包含一個格式清晰,易于理解的日志文件用于記錄所有修改操作,數據安全性更高,所有操作異步完成

缺點:

運行效率慢

文件更大

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18564.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ubuntu20】--- 定時同步文件

在編程的藝術世界里&#xff0c;代碼和靈感需要尋找到最佳的交融點&#xff0c;才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里&#xff0c;我們將共同追尋這種完美結合&#xff0c;為未來的世界留下屬于我們的獨特印記。 【Linux命令】--- 多核壓縮命令大全&…

肉類食品解凍污水處理設備功能特點

諸城市鑫淼環保小編帶大家了解一下肉類食品解凍污水處理設備功能特點 肉類食品解凍污水處理設備是專門用于處理肉類加工過程中產生的解凍廢水的設備。這些設備在保障肉類食品生產過程中的衛生安全同時&#xff0c;也有效處理了廢水&#xff0c;避免了環境污染。以下是對肉類食品…

VM虛擬機共享文件夾fuse: bad mount point `/mnt/hgfs‘: No such file or directory

報錯顯示掛載點 /mnt/hgfs 不存在&#xff0c;你需要先創建這個目錄。可以按照以下步驟進行操作&#xff1a; 創建掛載點目錄&#xff1a; sudo mkdir -p /mnt/hgfs 手動掛載共享文件夾&#xff1a; sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 確保每次啟動時自動…

液氮罐內部會污染嗎

液氮罐是一種常見的存儲液態氮的設備&#xff0c;廣泛應用于科研、生物醫藥、食品冷凍等領域。但是&#xff0c;人們對于液氮罐內部是否會產生污染一直存在疑問。 我們來看液氮罐內部可能的污染源。液氮罐內部主要存在以下幾種潛在的污染來源&#xff1a;氣體污染、雜質污染、…

C++ | Leetcode C++題解之第117題填充每個節點的下一個右側節點指針II

題目&#xff1a; 題解&#xff1a; class Solution { public:void handle(Node* &last, Node* &p, Node* &nextStart) {if (last) {last->next p;} if (!nextStart) {nextStart p;}last p;}Node* connect(Node* root) {if (!root) {return nullptr;}Node *…

推券客CMS淘寶優惠券網站源碼

推券客CMS淘寶優惠券網站源碼是一個以PHPMySQL進行開發的PHP淘寶客優惠券網站。支持電腦站、手機站以及微信公眾號查券。支持多級代理返利和阿里媽媽最新的渠道管理等功能。 五大優勢 一、全開源 推券客cms網站程序數據庫完全開源,目前市場上基本都是以下2種淘寶客系統 第一…

LeetCode - 雙指針(Two Pointers) 算法集合 [對撞指針、快慢指針、滑動窗口、雙鏈遍歷]

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139270999 雙指針算法是一種常見且靈活的技巧&#xff0c;通過使用兩個指針協同完成任務。這些指針可以指向不同的元素&#xff0c;具體應用取決于…

Java中的異常處理策略:編寫健壯的軟件

異常處理是Java編程中一個重要的方面&#xff0c;正確的異常處理策略可以使軟件更加健壯和易于維護。本文將詳細探討Java中的異常處理機制&#xff0c;介紹常見的異常類&#xff0c;以及提供有效的異常處理技巧和最佳實踐。 #### 1. Java異常類別 Java中的異常分為兩大類&…

Clickhouse 字符串函數使用總結—— Clickhouse基礎篇(七)

文章目錄 判空非空判斷字符串長度左補齊字符串右補齊字符串字符串轉小寫字符串轉大寫重復字符串拼接字符串函數計算子串base64編碼base64解碼判斷開頭字符串判斷結尾字符串刪除空白字符從HTML提取純文本字符串部分替換字符串全部替換字符串正則部分替換字符串正則全部替換計算子…

Spring Boot 與 OpenJ9 的 Docker 集成:提升 Java 應用性能的新選擇

## 引言 隨著 Docker 的普及&#xff0c;越來越多的開發者開始使用 Docker 來部署和管理他們的應用。在這種趨勢下&#xff0c;將 Spring Boot 與 OpenJ9 結合使用&#xff0c;可以為 Java 應用帶來更高的性能和更低的資源占用。本文將介紹如何在 Docker 環境中使用 Spring Bo…

回顧封裝、繼承和多態的概念,并給出相關示例

封裝、繼承和多態是面向對象編程&#xff08;OOP&#xff09;的三個核心概念。下面我將分別解釋這些概念&#xff0c;并給出相應的示例。 封裝 概念&#xff1a;封裝是將數據&#xff08;變量&#xff09;和操作數據的方法&#xff08;函數&#xff09;組合到一個類中&#x…

pytest斷言與Selenium模擬操作的規劃案例

pytest斷言與Selenium模擬操作的規劃案例 在使用pytest進行自動化測試時&#xff0c;斷言是驗證測試結果是否符合預期的關鍵步驟。pytest提供了簡潔的斷言語法&#xff0c;使得編寫測試用例更加直觀和易于維護。以下是一個簡單的規劃案例&#xff0c;展示了如何在pytest中使用…

202309青少年軟件編程(Python)等級考試試卷(四級)

第 1 題 【單選題】 用枚舉算法求解“100 以內既能被 3 整除又能被 4 整除的元素”時, 在下列數值范圍內,算法執行效率最高的是? ( ) A :1~101 B :4~100 C :12~100 D :12~96 正確答案:D 試題解析: 在選取循環控制變量時, 枚舉范圍應盡可能小, 但又不能遺漏。 第 …

掌握Python循環:從基礎到應用的完整指南

循環語句是編程中常用的一種結構&#xff0c;用于重復執行特定的代碼塊。Python3 提供了幾種類型的循環語句&#xff0c;包括for循環和while循環。接下來&#xff0c;我會詳細解釋循環語句的基本語法、常用命令、示例、應用場景、注意事項和總結。 基本語法 for 循環 for 變…

什么是勒索軟件

什么是勒索軟件 勒索軟件又稱勒索病毒&#xff0c;是一種特殊的惡意軟件&#xff0c;又被歸類為“阻斷訪問式攻擊”&#xff08;denial-of-access attack&#xff09;&#xff0c;與其他病毒最大的不同在于攻擊手法以及中毒方式。勒索軟件的攻擊方式是將受害者的電腦鎖起來或者…

mysql-增量備份流程詳細流程

3.增量備份流程 原理&#xff1a;每次備份上一次備份到現在產生的新數據 1.在數據庫上面創建一個測試的庫 增量備份流程&#xff08;重要) 增量備份跟上一次相比 我增加了啥--incremental //放到何處 --incremental-basedir //上一級//第一次增量備份 innobackupex --user…

Spring Boot中如何查詢PGSQL分表后的數據

數據庫用的pgsql&#xff0c;在表數據超過100w條的時候執行定時任務進行了分表&#xff0c;分表后表名命名為原的表名后面拼接時間&#xff0c;如原表名是card_device_trajectory_info&#xff0c;分表后拼接時間后得到card_device_trajectory_info_20240503&#xff0c;然后分…

ubuntu使用oh my zsh美化終端

ubuntu使用oh my zsh美化終端 文章目錄 ubuntu使用oh my zsh美化終端1. 安裝zsh和oh my zsh2. 修改zsh主題3. 安裝zsh插件4. 將.bashrc移植到.zshrcReference 1. 安裝zsh和oh my zsh 首先安裝zsh sudo apt install zsh然后查看本地有哪些shell可以使用 cat /etc/shells 將默…

使用nexus搭建的nodejs私庫,定期清理無用的npm組件,徹底釋放磁盤空間

一、背景 昨天我們整理了一篇關于docker私庫&#xff0c;如何定期清理以釋放磁盤空間的文章。 雖然也提及了npm前端應用的組件該如何定期清理的&#xff0c;本文是對它作一個補充說明。 前文也看到了&#xff0c;npm組件占用的blob空間為180多GB&#xff0c;急需清理。 二、…

Flutter 中的 MouseRegion 小部件:全面指南

Flutter 中的 MouseRegion 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;MouseRegion 是一個非常有用的小部件&#xff0c;它允許你為部件添加鼠標事件&#xff08;如點擊、懸停、離開等&#xff09;。這在開發需要處理鼠標交互的應用時尤為重要。本文將詳細介紹 Mou…