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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Redis 内存数据库

發布時間:2023/12/20 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis 内存数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么需要學習NOSQL (三高)

隨著互聯網的高速崛起,網站的用戶群的增加,訪問量的上升,傳統(關系型)數據庫上都開始出現了性能瓶頸,web程序不再僅僅專注在功能上,同時也在追求性能。所以NOSQL數據庫應運而上,具體表現為對如下三高問題的解決:

  • High performance - 對數據庫高并發讀寫的需求

    web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法使用動態頁面靜態化技術,因此數據庫并發負載非常高,往往要達到每秒上萬次讀寫請求。關系數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。其實對于普通的BBS網站,往往也存在對高并發寫請求的需求,例如網站的實時統計在線用戶狀態,記錄熱門帖子的點擊次數,投票計數等,因此這是一個相當普遍的需求。(微博 :明星曝光戀情)

  • Huge Storage - 對海量數據的高效率存儲和訪問的需求

    類似Facebook,twitter,Friendfeed這樣的SNS網站,每天用戶產生海量的用戶動態,以Friendfeed為例,一個月就達到了2.5億條用戶動態,對于關系數據庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關系數據庫也很難應付。

  • High Scalability && High Availability- 對數據庫的高可擴展性和高可用性的需求

    在基于web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,為什么數據庫不能通過不斷的添加服務器節點來實現擴展呢?

NOSQL的特點

在大數據存取上具備關系型數據庫無法比擬的性能優勢,例如:

  • 易擴展

    NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。

  • 大數據量,高性能

    NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益于它的無關系性,數據庫的結構簡單。

  • 靈活的數據模型

    NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關系數據庫里,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。這點在大數據量的Web2.0時代尤其明顯。

  • 高可用

    NoSQL在不太影響性能的情況,就可以方便的實現高可用的架構。比如Cassandra,HBase模型,通過復制模型也能實現高可用。

  • NoSQL:非關系型數據庫 是關系型數據庫的一個補充。

  • 為什么要使用NOSQL

  • 高并發讀寫需求

  • 高效率存儲和訪問的需求

  • 高擴展性和高可用性需求

  • 主流的NoSQL

  • redis

  • MongoDB

  • 什么是Redis

    Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,數據是保存在內存里面的. 官方提供測試數據,50個并發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s ,且Redis通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止Redis支持的鍵值數據類型如下:

    key是string類型,value可以是下面這五種類型

    • 字符串類型 string

    • 散列類型 hash java-hashmap

    • 列表類型 list java-linkedlist

    • 集合類型 set java-hashset

    • 有序集合類型 sortedset 簡稱:zset 有序且唯一

    Redis支持的數據類型有五種:string、hash、list、set、zset

    redis的應用場景

    • 緩存(數據查詢、短連接、新聞內容、商品內容、首頁等等)

    • 任務隊列。(秒殺、搶購、12306等等)

    • 數據過期處理(可以精確到毫秒, 短信驗證碼)

    • 分布式集群架構中 session共享

    • 分布式鎖實現

    • 聊天室的在線好友列表

    • 應用排行榜

    • 網站訪問統計

    redis中存儲的數據是以key-value的形式存在的.key是string類型,其中==value==支持5種數據類型 .在日常開發中主要使用比較多的有字符串string、哈希hash、字符串列表list、字符串集合set 四種類型,其中最為常用的是==字符串類型==。

    字符串(String)

    哈希(hash) 類似HashMap 適合存儲對象(屬性,屬性值)

    字符串列表(list) 類似LinkedList

    字符串集合(set) 類似HashSet

    有序的字符串集合(sorted-set或者叫zset) 有序且唯一

    Redis字符串(String)

    SET key value設置指定 key 的值
    GET key獲取指定 key 的值
    DEL key刪除key
    GETSET key value將給定 key 的值設為 value ,并返回 key 的舊值(old value)。
    SETEX key seconds value將值 value 關聯到 key ,并將 key 的過期時間設為 seconds (以秒為單位)。
    SETNX key value只有在 key 不存在時設置 key 的值。
    INCR key將 key 中儲存的數字值增一。
    INCRBY key increment將 key 所儲存的值加上給定的增量值(increment) 。
    DECR key將 key 中儲存的數字值減一。
    DECRBY key decrementkey 所儲存的值減去給定的減量值(decrement) 。

    ?

    Redis 哈希(Hash)

    命令命令描述
    hset key filed value將哈希表 key 中的字段 field 的值設為 value
    hmset key field1 value1 [field2 value2]...同時將多個 field-value (字段-值)對設置到哈希表 key 中
    hget key filed獲取存儲在哈希表中指定字段的值
    hmget key filed1 filed2獲取多個給定字段的值
    hdel key filed1 [filed2]刪除一個或多個哈希表字段
    hlen key獲取哈希表中字段的數量
    del key刪除整個hash(對象)
    HGETALL key獲取在哈希表中指定 key 的所有字段和值
    HKEYS key獲取所有哈希表中的字段
    HVALS key獲取哈希表中所有值

    ?Redis 列表(List)

    命令命令描述
    lpush key value1 value2...將一個或多個值插入到列表頭部(左邊)
    rpush key value1 value2...在列表中添加一個或多個值(右邊)
    lpop key左邊彈出一個 相當于移除第一個
    rpop key右邊彈出一個 相當于移除最后一個
    llen key返回指定key所對應的list中元素個數
    LINDEX key index通過索引獲取列表中的元素
    LINSERT key BEFORE| AFTER pivot value在列表元素前或后插入元素 eg:linsert words before c e pivot表示列表中的元素 value表示新插入的值

    ?

    Redis 集合(Set)

    命令命令描述
    sadd key member1 [member2]向集合添加一個或多個成員
    srem key member1 [member2]移除一個成員或者多個成員
    smembers key返回集合中的所有成員,查看所有
    SCARD key獲取集合的成員數
    SPOP key返回集合中移除的一個隨機元素
    SDIFF key1 [key2]返回給定所有集合的差集
    SUNION key1 [key2]返回所有給定集合的并集
    SINTER key1 [key2]返回給定所有集合的交集

    Redis 有序集合(sorted set | zset)

    命令命令描述
    ZADD key score member [score member ...]增加元素
    ZSCORE key member獲取元素的分數
    ZREM key member [member ...]刪除元素
    ZCARD key獲得集合中元素的數量
    ZRANGE key start stop[WITHSCORES]獲得排名在某個范圍的元素列表 查看所有元素:zrange key 0 -1 倒序排列查看:zrevrange key 0 2

    Redis不僅是使用命令來操作,現在基本上主流的語言都有客戶端支持,比如java、C、C#、C++、php、Node.js、Go等。 在官方網站里列一些Java的客戶端,有JedisRedissonlettuce、JDBC-Redis、等其中官方推薦使用Jedis和Redisson。 在企業中用的最多的就是Jedis,Jedis同樣也是托管在github上.

    方法解釋
    new Jedis(host, port)創建jedis對象,參數host是redis服務器地址,參數port是redis服務端口
    set(key,value)設置字符串類型的數據
    get(key)獲得字符串類型的數據
    hset(key,field,value)設置哈希類型的數據
    hget(key,field)獲得哈希類型的數據
    lpush(key,values)設置列表類型的數據
    lpop(key)列表左面彈棧
    rpop(key)列表右面彈棧
    sadd(String key, String... members)設置set類型的數據
    zrange(String key, long start, long end)獲得在某個范圍的元素列表
    del(key)刪除key
    exists(key)判斷key是否存在

    jedis的介紹

    方法解釋
    new Jedis(host, port)創建jedis對象,參數host是redis服務器地址,參數port是redis服務端口
    set(key,value)設置字符串類型的數據
    get(key)獲得字符串類型的數據
    hset(key,field,value)設置哈希類型的數據
    hget(key,field)獲得哈希類型的數據
    lpush(key,values)設置列表類型的數據
    lpop(key)列表左面彈棧
    rpop(key)列表右面彈棧
    sadd(String key, String... members)設置set類型的數據
    zrange(String key, long start, long end)獲得在某個范圍的元素列表
    del(key)刪除key
    exists(key)判斷key是否存在

    總結

    以上是生活随笔為你收集整理的Redis 内存数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

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