Redis初識

Redis

1、redis的介紹

一、什麼是NoSql

​ 爲了解決高併發、高可擴展(集羣)、高可用(不能宕機)、大數據存儲問題而產生的數據庫解決方案,就是NoSql數據庫。html

​ NoSql :全稱 not only sql ,非關係型數據庫。能夠做爲關係型數據庫的一個很好的補充。不能替代。前端

二、NoSql數據庫分類

2.1 鍵值(Key-Value)存儲數據庫

​ 相關產品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB。java

​ 典型應用:內容緩存,主要用於處理大量數據的高訪問負載。linux

​ 數據模型:一系列鍵值對c++

​ 優點:快速查詢git

​ 劣勢:存儲的數據缺乏結構化redis

2.2 列存儲數據庫

​ 相關產品:Cassandra, HBase, Riak算法

​ 典型應用:分佈式的文件系統spring

​ 數據模型:以列簇式存儲,將同一列數據存在一塊兒sql

​ 優點:查找速度快,可擴展性強,更容易進行分佈式擴展

​ 劣勢:功能相對侷限

2.3 文檔型數據庫

​ 相關產品:CouchDB、MongoDB

​ 典型應用:Web應用(與Key-Value相似,Value是結構化的)

​ 數據模型:一系列鍵值對

​ 優點:數據結構要求不嚴格

​ 劣勢:查詢性能不高,並且缺少統一的查詢語法

2.4 圖形(Graph)數據庫

​ 相關數據庫:Neo4J、InfoGrid、Infinite Graph

​ 典型應用:社交網絡

​ 數據模型:圖結構

​ 優點:利用圖結構相關算法。

​ 劣勢:須要對整個圖作計算才能得出結果,不容易作分佈式的集羣方案。

三、什麼是redis

​ Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫(nosql),應用在緩存。它經過提供多種鍵值數據類型來適應不一樣場景下的存儲需求,目前爲止Redis支持的鍵值數據類型有5種。

以下:

字符串類型 (String)

散列類型(hash)

列表類型(List)

集合類型(set)

有序集合類型(SortedSet)

四、redis的應用場景

緩存

分佈式集羣架構中的session分離

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

應用排行榜(SortedSet)

網站訪問統計

數據過時處理(expire)

2、Redis的基本操做

一、Redis五種數據類型
1.1 字符串類型 (String)

String:key-value

redis命令不區分大小寫,可是key區分的

redis中的數據都是字符串。

redis是單線程,(不適合存儲比較大的數據)

使用incr 命令,若是key 不存在,會自動建立key 並自動+1.

redis中全部的數據都是字符串。

set key value 設置值

get key 獲取值

incr key 加一

decr key 減一

1.2 散列類型(hash)

Hash: key-field-value

​ 至關於一個key 對應一個map (map中又是key- value),

​ 應用歸類

​ hset key field value

​ hget key field

​ hincrby key field num

1.3 列表類型(List)

List

​ List是有順序可重複(數據結構中的:雙鏈表,隊列)

​ 可做爲鏈表 ,從左添加元素 也能夠從右添加元素。

​ lpush list a b c d (從左添加元素)

​ rpush list 1 2 3 4 (從右邊添加元素)

​ lrange list 0 -1 (從0 到 -1 元素查看:也就表示查看全部)

​ lpop list (從左邊取,刪除)

​ rpop list (從右邊取,刪除)

1.4 集合類型(set)

Set

Set無順序,不能重複

sadd set1 a b c d d (向set1中添加元素) 元素不重複

smembers set1 (查詢元素)

srem set1 a (刪除元素)

SortedSet(zset)

有順序,不能重複

​ 適合作排行榜 排序須要一個分數屬性

1.5 有序集合類型(SortedSet)

zadd zset1 9 a 8 c 10 d 1 e (添加元素 zadd key score member )

(ZRANGE key start stop [WITHSCORES])(查看全部元素:zrange key 0 -1 withscores)

若是要查看分數,加上withscores.

zrange zset1 0 -1 (從小到大)

zrevrange zset1 0 -1 (從大到小)

zincrby zset2 score member (對元素member 增長 score)

1.6 key 命令

expire key second (設置key的過時時間)

ttl key (查看剩餘時間)(-2 表示不存在,-1 表示已被持久化,正數表示剩餘的時間)

persist key (清除過時時間,也便是持久化 持久化成功體提示 1 不成功0)。

del key: 刪除key

EXISTS key

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

select 0 表示:選擇0號數據庫。默認是0號數據庫

3、持久化方案

一、Redis持久化方案

​ Redis 數據都放在內存中。若是機器掛掉,內存的數據就不存在。

​ 須要作持久化,講內存中的數據保存在磁盤,下一次啓動的時候就能夠恢復數據到內存中。

2.1 RDB 快照形式

按期將當前時刻的數據保存磁盤中,會產生一個dump.rdb文件

特色:會存在數據丟失,性能較好,數據備份。

redis 默認開啓RDB

以下圖:redis.conf中默認設置了保存規則及時間間隔

img

2.2 AOF

append only file (全部對redis的操做命令記錄在aof文件中),恢復數據,從新執行一遍便可。

特色:每秒保存,數據比較完整,耗費性能。

AOF開啓設置:

修改 redis.conf 文件 以下圖:

將appendonly 設置爲yes

img

同時開啓兩個持久化方案,則按照 AOF的持久化放案恢復數據。

默認是按照rdb的方式恢復數據,若是開啓了AOF,就是用AOF恢復數據,數據是存在於/usr/local/redis/bin/appendonly.aof文件中

4、環境搭建

一、單機版

1.1 docker搭建
查找鏡像
[root@VM_0_13_centos ~]# docker search redis
NAME                             DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
redis                            Redis is an open source key-value store that…   7039                [OK]                
bitnami/redis                    Bitnami Redis Docker Image                      114                                     [OK]
sameersbn/redis                                                                  75                                      [OK]
grokzen/redis-cluster            Redis cluster 3.0, 3.2, 4.0 & 5.0               50                                      
...

複製代碼
下載鏡像
docker pull redis:須要的版本
複製代碼

等待下載完成後,咱們就能夠在本地鏡像列表裏查到REPOSITORY爲redis

查看鏡像
[root@VM_0_13_centos ~]# docker images redis
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              a4fe14ff1981        6 weeks ago         95MB

複製代碼
運行容器
docker run -d -p 6379:6379 --name 自定義名字 鏡像id
複製代碼
查看容器啓動狀況
[root@VM_0_13_centos ~]#docker ps
CONTAINER ID   IMAGE        COMMAND                 ...   PORTS                      NAMES
43f7a65ec7f8   redis:3.2    "docker-entrypoint.sh"  ...   0.0.0.0:6379->6379/tcp     agitated_cray
複製代碼
鏈接、查看容器

使用redis鏡像執行redis-cli命令鏈接到剛啓動的容器

docker exec -it 43f7a65ec7f8 redis-cli
localhost:6379> info
# Server
redis_version:3.2.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f449541256e7d446
redis_mode:standalone
os:Linux 4.2.0-16-generic x86_64
arch_bits:64
multiplexing_api:epoll
複製代碼
1.2 Linux搭建
Redis的下載

​ 官網地址:redis.io/

​ 下載地址:download.redis.io/releases/re…

Redis的安裝

安裝redis須要c語言的編譯環境,若是沒有gcc須要在線安裝。以下命令:

yum -y install gcc-c++ 
複製代碼

若是有GCC環境,只需輸入命令:

[root@localhost ~]# gcc   

出現 :gcc: no input files  表示安裝成功。
複製代碼

安裝步驟:

第一步:將redis的源碼包上傳到linux系統。

第二步:解壓縮redis的源碼包。

第三步:進行編譯。 cd到解壓後的目錄 輸入命令:make

第四步:進行安裝。 輸入命令:make install PREFIX=/usr/local/redis

PREFIX 必須是大寫的。

![img](file:///C:/Users/No/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)

第五步:檢查目錄是否存在。

在/usr/local/redis 下 有bin 說明安裝成功。

鏈接redis
redis服務端啓動

前端啓動

[root@localhost bin]# ./redis-server

後臺啓動:

第一步:把/root/redis-3.0.0/redis.conf複製到/usr/local/redis/bin目錄下

[root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis/bin/

第二步:使用vim命令修改redis.conf配置文件 將daemonize no修改成daemonize yes

第三步:輸入啓動命令

[root@localhost bin]# ./redis-server redis.conf

第四步:檢查redis進程:

[root@localhost bin]# ps -ef|grep redis

前端啓動,不能更換終端,影響下一步操做。然後臺啓動,只在進程中悄悄啓動。

推薦使用後臺啓動。

客戶端Redis-cli鏈接redis

使用Redis-cli創建鏈接:

[root@localhost bin]# ./redis-cli

默認鏈接localhost運行在6379端口的redis服務。

[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379

-h:鏈接的服務器的地址

-p:服務的端口號

使用redis的桌面程序創建鏈接

先安裝:

退出鏈接:

​ 第一種:

​ [root@localhost bin]# ./redis-cli

​ 127.0.0.1:6379> quit

​ 第二種:

​ [root@localhost bin]# ./redis-cli

​ 127.0.0.1:6379> exit

​ 第三種:CTR+C

​ [root@localhost bin]#

關閉Redis服務

第一種:經過鏈接上客戶端進行關閉,使用shutdown 命令。

或者:cd 到redis的bin 目錄 再執行如下:

[root@localhost bin]# ./redis-cli shutdown

第二種:使用 kill 命令。

找到對應的redis的進程id 而後使用命令:(pid爲進程id)

kill -9 pid

二、集羣版

說明:這篇文章總結了redis比較基礎的知識點,後期文章會經過springboot整合redis做爲緩存中間件使用以及集羣。集羣后期文章再總結

相關文章
相關標籤/搜索