引言
在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
- 微博
- 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的數據結構如下圖所示:

