任職要求中的熟系Redis,你真的熟悉嗎?

 1、NoSQL

1.一、NoSQL引言

    NoSQL( Not Only SQL ),意即不只僅是SQL, 泛指非關係型的數據庫。Nosql這個技術門類,早期就有人提出,發展至2009年趨勢愈加高漲。java

1.二、爲何是NoSQL

    隨着互聯網網站的興起,傳統的關係數據庫在應付動態網站,特別是超大規模和高併發的純動態網站已經顯得力不從心,暴露了不少難以克服的問題。如商城網站中對商品數據頻繁查詢對熱搜商品的排行統計訂單超時問題、以及微信朋友圈(音頻,視頻)存儲等相關使用傳統的關係型數據庫實現就顯得很是複雜,雖然能實現相應功能可是在性能上卻不是那麼樂觀。nosql這個技術門類的出現,更好的解決了這些問題,它告訴了世界不只僅是sql。redis

1.三、NoSQL的四大分類

1.3.一、鍵值(Key-Value)存儲數據庫

1.3.1.一、說明sql

    這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。shell

1.3.1.二、特色數據庫

  1. Key/value模型對於IT系統來講的優點在於簡單、易部署。
  2. 若是DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。

1.3.1.三、相關產品vim

  1. Tokyo Cabinet/Tyrant,
  2. Redis
  3. SSDB
  4. Voldemort
  5. Oracle BDB

1.3.二、列存儲數據庫

1.3.2.一、說明服務器

    這部分數據庫一般是用來應對分佈式存儲的海量數據。微信

1.3.2.二、特色併發

    鍵仍然存在,可是它們的特色是指向了多個列。這些列是由列家族來安排的。app

1.3.2.三、相關產品

  1. Cassandra
  2. HBase
  3. Riak.

1.3.三、文檔型數據庫

1.3.3.一、說明

    文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,並且它同第一種鍵值存儲相相似該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫能夠看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。

1.3.3.二、特色

    以文檔形式存儲。

1.3.3.三、相關產品

  1. MongoDB
  2. CouchDB
  3. MongoDb(4.x)
  4. SequoiaDB(國內)

1.3.四、圖形(Graph)數據庫

1.3.4.一、特色

    圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。

1.3.4.二、相關產品

  1. Neo4J
  2. InfoGrid
  3. Infinite Graph

1.四、NoSQL應用場景

  • 數據模型比較簡單

  • 須要靈活性更強的IT系統

  • 對數據庫性能要求較高

  • 不須要高度的數據一致性

2、Redis入門

2.一、概述

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

redis是一個內存型的數據庫

2.二、Redis特色

  1. Redis是一個高性能key/value內存型數據庫。

  2. Redis支持豐富的數據類型 。

  3. Redis支持持久化 。

  4. Redis單線程,單進程。

2.三、Redis的安裝(Linux版)

2.3.一、下載Redis源碼包

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

2.3.二、上傳並解壓

tar -zxvf redis-4.0.10.tar.gz

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

2.3.三、安裝gcc

yum install -y gcc

2.3.四、進入解壓縮目錄

make MALLOC=libc

2.3.五、編譯完成後執行以下命令

make install PREFIX=/usr/redis

2.3.六、進入/usr/redis目錄啓動redis服務

./redis-server

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

    一旦出現這個頁面就表明Redis啓動了!

2.3.七、進入bin目錄執行客戶端鏈接操做

./redis-cli –p 6379        (終端不展現中文)
/redis-cli –p 6379 --raw  (終端展現中文)

2.四、Redis安裝的細節

redis啓動服務的 細節

    若是直接使用./redis-server方式啓動使用的是redis-server這個shell設置,咱們在啓動的時候,要先啓動服務器 ./redis-server 而後克隆窗口(不能夠按ctrl+c暫停),在新窗口中啓動客戶端 ./redis-cli –p 6379

如何在啓動redis時指定配置文件啓動

    默認在reidis安裝完成以後在安裝目錄沒有任何配置文件,須要在源碼目錄中複製redis.conf配置文件到安裝目錄,具體操做:

  • 進入源碼目錄,複製文件
cp redis.conf /usr/redis
  • 進入/usr/redis的安裝目錄查看複製配置文件
cd /usr/redis
 ls
  • 進入bin目錄加載配置啓動
./redis-server ../redis.conf

redis中庫的概念

    庫是database 用來存放數據的一個基本單元,一個庫能夠存放key-value鍵值對,redis中每個庫都有一個惟一名稱(編號),從0開始,默認庫的個數是16個庫,庫的編號0-15,默認使用的是0號庫。     咱們可使用命令來切換庫,每一個庫是相互隔離的,每一個庫均可以有相同或者不一樣的key和value,互不影響。

# 切換庫
select dbid(庫編號)
# 清空當前庫
flushDB   
# 清空全部庫 
flushAll

開啓Redis遠程鏈接

  • 修改配置文件開啓遠程鏈接
vim redis.conf
  • 修改配置,按兩下鍵盤上的g到文章的第一個字母,而後在ntework章節中找到bind屬性,默認:bing 127.0.0.1 只容許本機訪問,修改成:
# 容許一切客戶端訪問
bing 0.0.0.0
  • 以配置文件的方式重啓Redis
./redis-server ../redis.conf
  • 能夠在客戶端中關閉Redis
# (切記前面有一個空格)
hutdown
3、Redis數據庫相關指令

3.一、數據庫操做指令

3.1.一、庫的說明

    Rsdis默認配置器動Redis服務後,默認會存在16個庫,編號從0-15,可使用select 庫的編號 ,來選擇一個Rsdis的庫。

seelect 庫編號

3.1.二、清空庫

# 清空當前的庫 
FLUSHDB
# 清空所有的庫 
FLUSHALL

3.1.三、redis客戶端顯示中文

./redis-cli  -p 7000 --raw

3.二、操做key的相關指令

3.2.一、DEL指令

3.2.1.一、語法

DEL key [key ...]

3.2.1.二、做用

    刪除給定的一個或多個key 。不存在的key 會被忽略。

3.2.1.三、返回值

    被刪除key的數量。

3.2.二、EXISTS指令

3.2.2.一、語法

EXISTS key

3.2.2.二、做用

    檢查給定key是否存在。

3.2.2.三、返回值

    若key 存在,返回1 ,不然返回0。

3.2.三、EXPIRE指令

3.2.3.一、語法

EXPIRE key seconds

3.2.3.二、做用

    爲給定key設置生存時間,當key 過時時(生存時間爲0 ),它會被自動刪除。他的時間複雜度爲O(1)。

3.2.3.三、返回值

    設置成功返回1。

3.2.四、PEXPIRE指令

3.2.4.一、語法

PEXPIRE key milliseconds

3.2.4.二、做用

    這個命令和EXPIRE 命令的做用相似,可是它以毫秒爲單位設置key 的生存時間,而不像EXPIRE 命令那樣,以秒爲單位。他的時間複雜度也是 O(1)

3.2.4.三、返回值

    設置成功,返回1 key 不存在或設置失敗,返回0

3.2.五、KEYS指令

3.2.5.一、語法

KEYS pattern

    他的pattern是一種通配符,能夠進行匹配:

  1. KEYS * :匹配數據庫中全部key 。
  2. KEYS h?llo:匹配hello ,hallo 和hxllo 等。
  3. KEYS h*llo:匹配hllo 和heeeeello 等。
  4. KEYS h[ae]llo:匹配hello 和hallo ,但不匹配hillo 。特殊符號用 "\" 隔開。

3.2.5.二、做用

    查找全部符合給定模式pattern 的key 。

3.2.5.三、返回值

    符合給定模式的key列表。

3.2.六、MOVE指令

3.2.6.一、語法

MOVE key db

3.2.6.二、做用

    將當前數據庫的key 移動到給定的數據庫db 當中。

3.2.6.三、返回值

    移動成功返回1 ,失敗則返回0

3.2.七、TTL指令

3.2.7.一、語法

TTL key

3.2.7.二、做用

以秒爲單位,返回給定key 的剩餘生存時間(TTL, time to live)。

3.2.7.三、返回值

  1. 當key 不存在時,返回-2 。
  2. 當key 存在但沒有設置剩餘生存時間時,返回-1 。
  3. 不然,以秒爲單位,返回key 的剩餘生存時間。
  4. 在Redis 2.8 之前,當key 不存在,或者key 沒有設置剩餘生存時間時,命令都返回-1 。

3.2.八、PTTL指令

3.2.8.一、語法

PTTL key

3.2.8.二、做用

     這個命令相似於TTL 命令,但它以毫秒爲單位返回key 的剩餘生存時間,而不是像TTL 命令那樣,以秒爲單位。

3.2.8.三、返回值

  1. 當key 不存在時,返回-2 。當key 存在但沒有設置剩餘生存時間時,返回-1 。
  2. 不然,以毫秒爲單位,返回key 的剩餘生存時間。
  3. 在Redis 2.8 之前,當key 不存在,或者key 沒有設置剩餘生存時間時,命令都返回-1 。

3.2.九、RANDOMKEY指令

3.2.9.一、語法

RANDOMKEY

3.2.9.二、做用

    從當前數據庫中隨機返回(不刪除) 一個key 。

3.2.9.三、返回值

    當數據庫不爲空時,返回一個key 。當數據庫爲空時,返回nil 。

3.2.十、RENAME指令

3.2.10.一、語法

RENAME key newkey

3.2.10.二、做用

    將key 更名爲newkey 。當key 和newkey 相同,或者key 不存在時,返回一個錯誤。當newkey 已經存在時,RENAME 命令將覆蓋舊值。

3.2.10.三、返回值

    更名成功時提示OK ,失敗時候返回一個錯誤。

3.2.十一、TYPE指令

3.2.11.一、語法

TYPE key

3.2.11.二、做用

返回key 所儲存的值的類型。

3.2.11.三、返回值

  1. none (key 不存在)
  2. string (字符串)
  3. list (列表)
  4. set (集合)
  5. zset (有序集)
  6. hash (哈希表)
4、Redis中的數據類型

4.一、String類型

4.1.一、內存模型

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

4.1.二、經常使用操做命令

命令 說明
set 設置一個key/value
get 根據key得到對應的value
mset 一次設置多個key value
mget 一次得到多個key的value
getset 得到原始key的值,同時設置新值
strlen 得到對應key存儲value的長度
append 爲對應key的value追加內容
getrange 截取value的內容,-1能夠表明末尾(索引0開始)
setex 設置一個key存活的有效期(秒)
psetex 設置一個key存活的有效期(毫秒)
setnx 存在不作任何操做,不存在添加
msetnx 能夠同時設置多個key,原子操做,只要有一個存在都不保存
decr 進行數值類型的-1操做
decrby 根據提供的數據進行減法操做
Incr 進行數值類型的+1操做
incrby 根據提供的數據進行加法操做
Incrbyfloat 根據提供的數據加入浮點數

4.二、List類型

    Redis中的List類型至關於java中list 集合,他的特色是元素有序且能夠重複

4.2.一、內存模型

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

4.2.二、經常使用操做指令

命令 說明
lpush 將某個值加入到一個key列表頭部(從左添加)
lpushx 同lpush,可是必需要保證這個key存在
rpush 將某個值加入到一個key列表末尾(從右邊開始放元素)
rpushx 同rpush,可是必需要保證這個key存在
lpop 返回和移除列表左邊的第一個元素,而且返回
rpop 返回和移除列表右邊的第一個元素,而且返回
lrange 獲取某一個下標區間內的元素(遍歷,默認從0開始,最後的能夠用-1)
llen 獲取列表元素個數
lset 設置某一個指定索引的值(索引必須存在)
lindex 獲取某一個指定索引位置的元素
lrem 刪除重複元素 lerm lists 3 zhangsan(刪除lists集合中3個zhangsan)
ltrim 保留列表中特定區間內的元素
linsert 在某一個元素以前,以後插入新元素

4.三、Set類型

4.3.一、內存模型

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

4.3.二、經常使用命令

命令 說明
sadd 爲集合添加元素
smembers 顯示集合中全部元素,其實是無序
scard 返回集合中元素的個數
spop 隨機返回一個元素 並將元素在集合中刪除
smove 從一個集合中向另外一個集合移動元素 ,必須是同一種類型
srem 從集合中刪除一個元素
sismember 判斷一個集合中是否含有這個元素
srandmember 隨機返回元素
sdiff 去掉第一個集合中其它集合含有的相同元素
sinter 求交集
sunion 求和集

4.四、ZSet類型

    他是一個可排序的set集合 且不可重複 ,又稱做sortSet 。

4.4.一、內存模型

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

4.4.二、經常使用命令

命令 說明
zadd 添加一個有序集合元素
zcard 返回集合的元素個數
zrange 升序 zrevrange 降序 返回一個範圍內的元素
zrangebyscore 按照分數查找一個範圍內的元素
zrank 返回排名
zrevrank 倒序排名
zscore 顯示某一個元素的分數
zrem 移除某一個元素
zincrby 給某個特定元素加分

4.五、Hash類型

     value中放一個map結構,存在key和value,key是無序的

4.5.一、內存模型

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

4.5.二、經常使用命令

命令 說明
hset 設置一個key/value對
hget 得到一個key對應的value
hgetall 得到全部的key/value對
hdel 刪除某一個key/value對
hexists 判斷一個key是否存在
hkeys 得到全部的key
hvals 得到全部的value
hmset 設置多個key/value
hmget 得到多個key的value
hsetnx 設置一個不存在的key的值
hincrby 爲value進行加法運算(實現自增)
hincrbyfloat 爲value加入浮點值(最多保留17位)

相關文章
相關標籤/搜索