慕課網_《Redis入門》學習總結

時間:2017年05月21日星期日
說明:本文部份內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
我的學習源碼:https://github.com/zccodere/s...git

第一章:課程介紹

1-1 課程介紹

課程介紹github

NoSQL的概述
Redis的概述
Redis的安裝和使用
Jedis的入門
Redis的數據類型
Keys的通用操做
Redis的特性
Redis的持久化

第二章:NoSQL概述

2-1 NoSQL的概述

什麼是NoSQLredis

NoSQL = Not Only SQL
非關係型數據庫

爲何須要NoSQL算法

High performance 高併發讀寫
Huge Storage 海量數據的高效率存儲和訪問
High Scalability && High Availability 高可擴展性和高可用性

主流的NoSQL產品docker

clipboard.png

NoSQL數據庫的四大分類數據庫

鍵值對(Key-Value)存儲:Redis
    優:快速查詢
    劣:存儲的數據缺乏結構化
列存儲:HBase
    優:快速查詢、擴展性強
    劣:功能相對侷限
文檔數據庫:MongoDB
    優:數據結構要求不是很嚴格
    劣:查詢性能不高、缺乏統一的查詢語法
圖形數據庫:InfoGrid
    優:利用圖結構相關算法
    劣:須要對整個圖作計算才能得出結果、不容易作分佈式集羣方案

四類NoSQL數據庫比較數組

clipboard.png

NoSQL的特色緩存

易擴展
靈活的數據模型
大數據量、高性能
高可用

第三章:Redis概述

3-1 Redis的概述

Redis高性能鍵值對數據庫,支持的鍵值數據類型:安全

字符串類型
列表類型
有序集合類型
散列類型
集合類型

Redis的應用場景bash

緩存
任務隊列
網站訪問統計
數據過時處理
應用排行榜
分佈式集羣架構中的session分離

第四章:Redis的安裝和使用

4-1 Redis的安裝

Windows安裝Redis搭建環境

虛擬機:VMware 10.0.2
Linux系統:CentOS-6.5
SSH客戶端:SecureCRT 7.3 , SecureFX 7.3

推薦使用在Linux系統下docker安裝Redis,需先安裝docker

下載鏡像
docker pull hub.c.163.com/library/redis:latest
運行鏡像
docker run --name myredis -d -p 6379:6379 hub.c.163.com/library/redis
進入容器
docker exec -it CONTAINERID /bin/bash
鏈接Redis
redis-cli 172.17.0.1:6379 或 redis-cli
發送命令
發送ping,回覆PONG即表明Redis安裝成功

clipboard.png

第五章:Jedis的入門

5-1 Jedis入門

Jedis介紹

Jedis是Redis官方首選的Java客戶端開發包
https://github.com/xetorthio/jedis

測試項目環境搭建

使用gradle做爲構建工具。詳情見源碼。

代碼演示:

package com.myimooc.jedis;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Jedis的測試
 * Created by ChangComputer on 2017/5/21.
 */
public class JedisDemo1 {

    /**
     * 單實例的測試
     */
    @Test
    public void demo1(){
        // 1.設置IP地址和端口
        Jedis jedis = new Jedis("192.168.77.128",6379);
        // 2.保存數據
        jedis.set("name","myimooc");
        // 3.獲取數據
        String value = jedis.get("name");

        System.out.println(value);

        // 4.釋放資源
        jedis.close();
    }

    /**
     * 使用鏈接池方式鏈接
     */
    @Test
    public void demo2(){
        // 得到鏈接池的配置對象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 設置最大鏈接數
        jedisPoolConfig.setMaxTotal(30);
        // 設置最大空閒鏈接數
        jedisPoolConfig.setMaxIdle(10);
        // 得到鏈接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.77.128",6379);
        // 經過鏈接池得到鏈接
        Jedis jedis = jedisPool.getResource();
        // 設置數據
        jedis.set("name","張三");
        // 獲取數據
        String value = jedis.get("name");
        System.out.println(value);
        // 釋放資源
        jedis.close();
        // 釋放鏈接池
        jedisPool.close();

    }
}

第六章:Redis的數據結構

6-1 字符串

五種數據類型:

字符串(String)
哈希(hash)
字符串列表(list)
字符串集合(set)
有序字符串集合(sorted set)
字符串集合(set)

Key定義的注意點:

不要過長:最好不要超過1024個字節
不要太短:過短不利於閱讀,如a
統一的命令規範

存儲String

二進制安全的,存入和獲取的數據相同
Value最多能夠容納的數據長度是512M

存儲String經常使用命令

賦值:set key value
取值:get key
獲取值:getset key value
刪除:del key
數值增減:incr key  decr key
擴展命令:incrby key number  decrby key number
追加命令:append key str

6-2 哈希

存儲Hash

String Key和String Value的map容器
每個Hash能夠存儲4294967295個鍵值對

存儲Hash經常使用命令:

賦值:hset name key value  hmset name key value key value
取值:hget name key  hmget name key key  hgetall name
刪除:hdel name key  del name
增長數字:hincrby name key number
自學命令:hexists name key  hlen name  hkeys name  hvals name

6-3 list

存儲list

ArrayList使用數組方式
LinkedList使用雙向連接方式
雙向鏈表中增長數據
雙向鏈表中刪除數據

存儲list經常使用命令

兩端添加

lpush key value1 value2 value3
將value1和value2和value3放入爲key的鏈表,當key不存在時,會自動建立該鏈表。
    當key對應的鏈表存在時,從左側插入數據。
rpush key value1 value2 value 3
從右側插入數據。

查看列表

lrange key start end
查看爲key的鏈表,從指定start開始,到end結束

兩端彈出

lpop key
左邊彈出,返回並彈出指定的key所關聯鏈表的頭部(第一個)元素
rpop key
右邊彈出,返回並彈出指定的key所關聯鏈表的尾部(最後一個)元素

獲取列表元素個數

llen key
返回指定key所關聯鏈表的長度,當key不存在時,返回0

擴展命令

lpushx key value
僅當指定的key關聯鏈表存在時,在頭部插入value
rpushx key value
僅當指定的key關聯鏈表存在時,在尾部插入value
lrem key count value
在指定的key關聯的鏈表中,刪除count個value
    當count小於0時,從尾到頭刪除
    當count等於0時,刪除全部
    當count大於0時,從頭至尾刪除
lset key index value
在指定的key關聯的鏈表中,修改下標爲index的值爲value
linsert key before value newvalue
在指定的key關聯的鏈表中,在value以前插入newvalue
linsert key after value newvalue
在指定的key關聯的鏈表中,在value以後插入newvalue
rpoplpush key1 key2
將key1裏面的第一個值彈出壓入key2頭部

rpoplpush使用場景

clipboard.png

6-4 set

存儲Set

和List類型不一樣是,Set集合中不容許出現重複的元素
Set可包含的最大元素數量是4294967295

添加元素

sadd key value1 value2 value3
將value1和value2和value3添加到key的set集合

刪除元素

srem key value1 value2
刪除爲key的set集合裏面的value1和value2

得到集合中的元素

smembers key
獲取爲key的set集合中的元素
sismember key value1
判斷value1是否存在於key的set集合中。一、存在;0、不存在

集合中的差集運算

sdiff key1 key2
獲取在key1中存在,在key2中不存在的元素。跟key的順序相關

集合中的交集運算

sinter key1 key2
獲取在key1和key2中都存在的元素

集合中的並集運算

sunion key1 key2
獲取key1中和key2中的全部元素,元素重複時,會去掉一個重複的元素

擴展命令

scard key
得到爲key的set集合中成員的數量
srandmember key
隨機返回爲key的set集合中的某個成員
sdiffstore newKey key1 key2
將兩個集合key1和key2差集的元素存儲到另外一個集合newKey中
sinterstore newKey key1 key2
將兩個集合key1和key2交集的元素存儲到另外一個集合newKey中
sunionstore newKey key1 key2
將兩個集合key1和key2並集的元素存儲到另外一個集合newKey中

使用場景

跟蹤一些具備惟一性的數據。好比訪問某個博客的惟一IP地址的信息,僅須要在每次訪問該博客的時候,將訪問者的IP存入redis當中。充分利用set類型的服務器端聚合操做的方便、高效的特性,能夠用於維護數據對象之間的關聯關係。好比:全部購買某一電子設備的客戶的ID,被存儲到一個指定的set當中,而購買另一種電子產品客戶的ID,被存儲到另一個set當中,若是此時想得到有哪些客戶同時購買了這兩種商品,那麼這時候,可使用它們的交集操做便可。

6-5 sorted-set

Sorted-Set概述

Sorted-Sets和Sets類型極爲類似,它們都是字符串的集合,都不容許重複的成員出如今一個Set中。它們之間的主要差異是Sorted-Sets中的每個成員都會有一個分數(score)與之關聯,Redis正是經過分數來爲集合中的成員進行從小到大的排序。然而須要額外指出的是,儘管Sorted-Sets中的成員必須是惟一的,可是分數(score)倒是能夠重複的。在Sorted-Set中添加、刪除或更新一個成員都是很是快速的操做,其時間複雜度爲集合中成員數量的對數。因爲Sorted-Sets中的成員在集合中的位置是有序的,所以,即使是訪問位於集合中部的成員也仍然是很是高效的。事實上,Redis所具備的這一特徵在不少其它類型的數據庫中是很難實現的,換句話說,在該點上要想達到和Redis一樣的高效,在其它數據庫中進行建模是很是困難的。

Sorted-Set經常使用命令

添加元素

zadd key score1 value1 score2 value2 score3 value3
添加三個元素到名爲key的Sorted-Set集合中。每個元素都有一個分數score和值value

得到元素

zscore key value
得到名爲key的Sorted-Set集合中value對應的分數score
zcard key
得到名爲key的Sorted-Set集合中成員的數量

刪除元素

zrem key value1 value2
刪除名爲key的Sorted-Set集合中的值value1和value2元素

範圍查詢

zrange key start end
查找在start和end之間的元素,默認由分數從小到大排序
zrange key start end withscores
查找在start和end之間的元素,並顯示元素的分數
zrevrange key start end withscores
查找在start和end之間的元素,並顯示元素的分數,分數從大到小排序
zremrangebyrank key start end
按照指定範圍刪除元素
zremrangebyscore key startscore endscore
按照指定分數的範圍刪除元素

擴展命令

zrangebyscore key startscore endscore withscore limit startindex count
返回分數在指定範圍之間的元素,分數從小到大排序,從下標爲startindex開始,顯示count個
zincrby key addscore value
給指定value元素的分數score增長addscore分
zcount key startscore endscore
獲取分數在某個範圍之間元素的個數

使用場景

在遊戲的排名上。大型遊戲的積分排行榜,每當玩家的分數發生變化時,
    能夠執行zadd命令去更新玩家的分數
微博上的熱點話題
構建索引數據

第七章:Redis的通用命令

7-1 Redis的Keys的通用操做

Keys通用操做

keys *
得到全部的key
keys my?
得到全部以my開頭的key
del key1 key2 key3
刪除key1和key2和key3
exists key
查看key是否存在,一、存在;0、不存在
rename oldkey newkey
重命名key,將oldkey重命名爲newkey
expire key 1000
設置過時時間。單位:秒
ttl key
查看key所剩超時的時間,若是key沒有設置過時時間,則返回-1
type key
得到指定key的數據類型

第八章:Redis的事務

8-1 Redis的特性

相關特性

多數據庫
Redis事務

多數據庫

一個Redis實例能夠包含多個數據庫,客戶端能夠指定鏈接哪一個數據庫。一個Redis實例最多能夠提供16個數據庫,下標從0到15,客戶端默認鏈接0號數據庫。經過select選擇鏈接到哪一個數據庫。

多數據庫相關命令

select 1
鏈接到1號數據庫
move key 1
將key移動到1號數據庫

Redis事務相關命令

multi
開啓事務,後面執行的命令會被存到命令隊列當中,直到執行提交事務命令
exec
提交事務,命令隊列裏面的命令會被原子化執行
discard
回滾事務

第九章:Redis的持久化

9-1 Redis的持久化的概述

持久化使用的方式

RDB持久化:默認支持,不須要進行配置。在指定的時間間隔內,將內存中的數據及快照寫入到磁盤
AOC持久化:將以日誌形式,記錄服務器所處理的每個操做,在redis服務器啓動之初,
    會讀取該文件,從新構建數據庫,保證啓動後數據的完整性
無持久化:經過配置來禁用redis服務器持久化的功能,這時候,redis就是一個緩存機制
同時使用RDB和AOF

9-2 RDB方式持久化

RDB方式持久化優點

只包含一個文件,方便文件備份
對於災難恢復而言,RDB是一個很是不錯的選擇
性能最大化,由子進程完成持久化操做
相比AOF,大數據集啓動效率更高

RDB方式持久化缺點

若是想保證數據的高可用性,即最大限度的避免數據的丟失,RDB將不是一個很好的選擇。當系統在定時持久化以前出現宕機,還將來得及往硬盤寫入數據,那數據就丟失了。當數據集過大時,可能會致使服務器中止幾百毫秒甚至是1秒鐘。

RDB方式持久化配置

redis.conf
save 900 1:每900秒,至少有1個key發生變化,會持久化一次
save 300 10:每300秒,至少有10個key發生變化,會持久化一次
save 60 10000:每60秒,至少有10000個key發生變化,會持久化一次
dbfilename:配置持久化文件名稱
dir:配置持久化文件保存路徑,默認./配置文件當前路徑

9-3 AOF方式持久化

AOF方式持久化優點

帶來更高的數據安全性,每秒同步或每修改同步或不一樣步
對於日誌文件寫入操做採用追加模式,當寫入過程當中出現宕機時,不會破壞已經存在的內容
若是日誌過大,redis會自動啓動重寫機制
AOF包含格式清晰、易於理解的日誌文件記錄全部的修改操做,經過該文件可完成數據重建

AOF方式持久化劣勢

對於相同數據集而言,AOF的文件要比RDB的文件大一些
根據同步策略的不一樣,運行效率要低於RDB

AOF方式持久化配置

redis.conf
appendonly:配置AOF持久化是否啓用,默認no:不啓用
appendfilename:配置AOC持久化文件名稱
appendfsync always:每修改一次同步一次,默認不啓用,爲了更安全,推薦使用
appendfsync everysec:每秒同步一次,默認啓用
appendfsync no:不一樣步,默認不啓用

第十章:課程總結

10-1 Redis的課程總結

課程總結

介紹了什麼是NoSQL
介紹了什麼是Redis
Redis的安裝以及簡單使用
Jedis的入門,重點掌握,須要經過程序去操做Redis
介紹了Redis經常使用的數據類型,主要:字符串和哈希
瞭解keys的通用操做
瞭解Redis的多數據庫和事務
瞭解Redis的持久化

最主要的仍是:要會使用程序操做Redis

相關文章
相關標籤/搜索