日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

空字符是什么类型_Redis是什么?看这一篇就够了!

發布時間:2025/3/15 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 空字符是什么类型_Redis是什么?看这一篇就够了! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號關注杰哥的IT之旅”,選擇“星標”,重磅干貨,第一時間送達!薅起來!當當限時 3 折購書!來源:https://www.cnblogs.com/powertoolsteam/p/redis.html

引言

在Web應用發展的初期,那時關系型數據庫受到了較為廣泛的關注和應用,原因是因為那時候Web站點基本上訪問和并發不高、交互也較少。而在后來,隨著訪問量的提升,使用關系型數據庫的Web站點多多少少都開始在性能上出現了一些瓶頸,而瓶頸的源頭一般是在磁盤的I/O上。而隨著互聯網技術的進一步發展,各種類型的應用層出不窮,這導致在當今云計算、大數據盛行的時代,對性能有了更多的需求,主要體現在以下四個方面:
  • 低延遲的讀寫速度:應用快速地反應能極大地提升用戶的滿意度
  • 支撐海量的數據和流量:對于搜索這樣大型應用而言,需要利用PB級別的數據和能應對百萬級的流量
  • 大規模集群的管理:系統管理員希望分布式應用能更簡單的部署和管理
  • 龐大運營成本的考量:IT部門希望在硬件成本、軟件成本和人力成本能夠有大幅度地降低
  • 為了克服這一問題,NoSQL應運而生,它同時具備了高性能、可擴展性強、高可用等優點,受到廣泛開發人員和倉庫管理人員的青睞。

    Redis是什么

    Redis是現在最受歡迎的NoSQL數據庫之一,Redis是一個使用ANSI C編寫的開源、包含多種數據結構、支持網絡、基于內存、可選持久性的鍵值對存儲數據庫,其具備如下特性:
    • 基于內存運行,性能高效
    • 支持分布式,理論上可以無限擴展
    • key-value存儲系統
    • 開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API
    相比于其他數據庫類型,Redis具備的特點是:
    • C/S通訊模型
    • 單進程單線程模型
    • 豐富的數據類型
    • 操作具有原子性
    • 持久化
    • 高并發讀寫
    • 支持lua腳本
    哪些大廠在使用Redis?
    • github
    • twitter
    • 微博
    • Stack Overflow
    • 阿里巴巴
    • 百度
    • 美團
    • 搜狐

    Redis的應用場景有哪些?

    Redis 的應用場景包括:緩存系統(“熱點”數據:高頻讀、低頻寫)、計數器、消息隊列系統、排行榜、社交網絡和實時系統。

    Redis的數據類型及主要特性

    Redis提供的數據類型主要分為5種自有類型和一種自定義類型,這5種自有類型包括:String類型、哈希類型、列表類型、集合類型和順序集合類型。

    String類型:

    它是一個二進制安全的字符串,意味著它不僅能夠存儲字符串、還能存儲圖片、視頻等多種類型, 最大長度支持512M。對每種數據類型,Redis都提供了豐富的操作命令,如:
    • GET/MGET
    • SET/SETEX/MSET/MSETNX
    • INCR/DECR
    • GETSET
    • DEL

    哈希類型:

    該類型是由field和關聯的value組成的map。其中,field和value都是字符串類型的。Hash的操作命令如下:
    • HGET/HMGET/HGETALL
    • HSET/HMSET/HSETNX
    • HEXISTS/HLEN
    • HKEYS/HDEL
    • HVALS

    列表類型:

    該類型是一個插入順序排序的字符串元素集合, 基于雙鏈表實現。List的操作命令如下:
    • LPUSH/LPUSHX/LPOP/RPUSH/RPUSHX/RPOP/LINSERT/LSET
    • LINDEX/LRANGE
    • LLEN/LTRIM

    集合類型:

    Set類型是一種無順序集合, 它和List類型最大的區別是:集合中的元素沒有順序, 且元素是唯一的。Set類型的底層是通過哈希表實現的,其操作命令為:
    • SADD/SPOP/SMOVE/SCARD
    • SINTER/SDIFF/SDIFFSTORE/SUNION
    Set類型主要應用于:在某些場景,如社交場景中,通過交集、并集和差集運算,通過Set類型可以非常方便地查找共同好友、共同關注和共同偏好等社交關系。

    順序集合類型:

    ZSet是一種有序集合類型,每個元素都會關聯一個double類型的分數權值,通過這個權值來為集合中的成員進行從小到大的排序。與Set類型一樣,其底層也是通過哈希表實現的。ZSet命令:
    • ZADD/ZPOP/ZMOVE/ZCARD/ZCOUNT
    • ZINTER/ZDIFF/ZDIFFSTORE/ZUNION

    Redis的數據結構

    Redis的數據結構如下圖所示:關于上表中的部分釋義:
  • 壓縮列表是列表鍵和哈希鍵的底層實現之一。當一個列表鍵只包含少量列表項,并且每個列表項要么就是小整數,要么就是長度比較短的字符串,Redis就會使用壓縮列表來做列表鍵的底層實現
  • 整數集合是集合鍵的底層實現之一,當一個集合只包含整數值元素,并且這個集合的元素數量不多時,Redis就會使用整數集合作為集合鍵的底層實現
  • 如下是定義一個Struct數據結構的例子:

    簡單動態字符串SDS (Simple Dynamic String)

    基于C語言中傳統字符串的缺陷,Redis自己構建了一種名為簡單動態字符串的抽象類型,簡稱SDS,其結構如下:SDS幾乎貫穿了Redis的所有數據結構,應用十分廣泛。

    SDS的特點

    和C字符串相比,SDS的特點如下:1. 常數復雜度獲取字符串長度Redis中利用SDS字符串的len屬性可以直接獲取到所保存的字符串的長    度,直接將獲取字符串長度所需的復雜度從C字符串的O(N)降低到了O(1)。2. 減少修改字符串時導致的內存重新分配次數通過C字符串的特性,我們知道對于一個包含了N個字符的C字符串來說,其底層實現總是N+1個字符長的數組(額外一個空字符結尾)那么如果這個時候需要對字符串進行修改,程序就需要提前對這個C字符串數組進行一次內存重分配(可能是擴展或者釋放)而內存重分配就意味著是一個耗時的操作。Redis巧妙的使用了SDS避免了C字符串的缺陷。在SDS中,buf數組的長度不一定就是字符串的字符數量加一,buf數組里面可以包含未使用的字節,而這些未使用的字節由free屬性記錄。與此同時,SDS采用了空間預分配的策略,避免C字符串每一次修改時都需要進行內存重分配的耗時操作,將內存重分配從原來的每修改N次就分配N次——>降低到了修改N次最多分配N次。如下是Redis對SDS的簡單定義:

    Redis特性1:事務

    • 命令序列化,按順序執行
    • 原子性
    • 三階段: 開始事務 - 命令入隊 - 執行事務
    • 命令:MULTI/EXEC/DISCARD

    Redis特性2:發布訂閱(Pub/Sub)

    • Pub/sub是一種消息通訊模式
    • Pub發送消息, Sub接受消息
    • Redis客戶端可以訂閱任意數量的頻道
    • “fire and forgot”, 發送即遺忘
    • 命令:Publish/Subscribe/Psubscribe/UnSub

    Redis特性3:Stream

    • Redis 5.0新增
    • 等待消費
    • 消費組(組內競爭)
    • 消費歷史數據
    • FIFO
    以上就是Redis的基本概念,下面我們將介紹在開發過程中可能會踩到的“坑”。

    Redis常見問題解析:擊穿

    概念:在Redis獲取某一key時, 由于key不存在, 而必須向DB發起一次請求的行為, 稱為“Redis擊穿”。引發擊穿的原因:
    • 第一次訪問
    • 惡意訪問不存在的key
    • Key過期
    合理的規避方案:
    • 服務器啟動時, 提前寫入
    • 規范key的命名, 通過中間件攔截
    • 對某些高頻訪問的Key,設置合理的TTL或永不過期

    Redis常見問題解析:雪崩

    概念:Redis緩存層由于某種原因宕機后,所有的請求會涌向存儲層,短時間內的高并發請求可能會導致存儲層掛機,稱之為“Redis雪崩”。合理的規避方案:
    • 使用Redis集群
    • 限流

    Redis在產品開發中的應用實踐

    為此,我很高興的為大家介紹,葡萄城架構師Jim將在2019-11-27 14:00 為大家帶來一場公開課,其中 Jim除了為大家講解Redis的基礎,同時也會實際演示他所在的項目組使用Redis時碰到的問題以及解決方案,對于剛接觸Redis的同學來說,更具參考意義和學習價值,歡迎大家屆時參加,公開課地址:https://live.vhall.com/661463644。
    • 后端采用nodeJS
    • 使用Azure的Redis服務
    • Redis的使用場景
    - ?token緩存, 用于令牌驗證- ?IP白名單碰到的問題
    • “網絡抖動”或者Redis服務異常導致Redis訪問超時
    • Redis客戶端驅動穩定性問題
    - ?連接池 “Broken connection” 問題- ?JS的Promise引出的Redis重置問題下面我們來簡單了解一下Redis的進階知識。

    進階之Redis協議簡介

    Redis客戶端通訊協議:RESP(Redis Serialization Protocol),其特點是:
    • 簡單
    • 解析速度快
    • 可讀性好
    Redis集群內部通訊協議:RECP(Redis Cluster Protocol ) ,其特點是:
    • 每一個node兩個tcp 連接
    • 一個負責client-server通訊(P: 6379)
    • 一個負責node之間通訊(P: 10000 + 6379)
    Redis協議支持的數據類型:
    • 簡單字符(首字節: “+”)

      “+OK\r\n”

    • 錯誤(首字節: “-”)

      “-error msg\r\n”

    • 數字(首字節: “:”)

      “:123\r\n”

    • 批量字符(首字節: “$”)

      “&hello\r\nWhoa re you\r\n”

    • 數組(首字節: “*”)

      “*0\r\n”

      “*-1\r\n”

    除了Redis,還有什么NoSQL型數據庫

    市面上類似于Redis,同樣是NoSQL型的數據庫有很多,如下圖所示,除了Redis,還有MemCache、Cassadra和Mongo。下面,我們就分別對這幾個數據庫做一下簡要的介紹:**Memcache:**這是一個和Redis非常相似的數據庫,但是它的數據類型沒有Redis豐富。Memcache由LiveJournal的Brad Fitzpatrick開發,作為一套分布式的高速緩存系統,被許多網站使用以提升網站的訪問速度,對于一些大型的、需要頻繁訪問數據庫的網站訪問速度的提升效果十分顯著。Apache Cassandra:(社區內一般簡稱為C*)這是一套開源分布式NoSQL數據庫系統。它最初由Facebook開發,用于儲存收件箱等簡單格式數據,集Google BigTable的數據模型與Amazon Dynamo的完全分布式架構于一身。Facebook于2008將 Cassandra 開源,由于其良好的可擴展性和性能,被 Apple、Comcast、Instagram、Spotify、eBay、Rackspace、Netflix等知名網站所采用,成為了一種流行的分布式結構化數據存儲方案。MongoDB:是一個基于分布式文件存儲、面向文檔的NoSQL數據庫,由C++編寫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系型數據庫的,它支持的數據結構非常松散,是一種類似json的BSON格式。

    總結

    以上就是Redis入門介紹教程,如果各位還想了解更多,歡迎通過評論和私信的方式告訴我。

    如果您覺得這篇文章對您有點用的話,麻煩您為本文來個四連:轉發分享、點贊、點在看、留言,因為這將是我寫作與分享更多優質文章的最強動力!


    本公眾號全部博文已整理成一個目錄,請在公眾號后臺回復「m」獲取!

    推薦閱讀:

    1、史上最全 Redis 總結,你想知道的都在這里啦!
    2、學 Redis,至少要看看這篇!7000 字小結
    3、Redis 使用的 10 個小技巧!
    4、請收好這一份詳細 & 清晰的計算機網絡基礎學習指南!
    5、打造一款高逼格的 Vim 神器!
    6、超清晰的 DNS 原理入門指南!關注微信公眾號「杰哥的IT之旅」,后臺回復「1024」查看更多內容,回復「加群備注:地區-職業方向-昵稱?即可加入讀者交流群。

    點個[在看],是對杰哥最大的支持!

    總結

    以上是生活随笔為你收集整理的空字符是什么类型_Redis是什么?看这一篇就够了!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。