redis 基礎

NoSQL

學名(not only sql)

特色:

存儲結構與mysql這一種關係型數據庫徹底不一樣,nosql存儲的是KV形式

nosql有不少產品,都有本身的api和語法,以及業務場景

產品種類:

Mongodb

redis

Hbase hadoop

Nosql 與sql 的區別php

應用場景不一樣,sql支持關係複雜的數據查詢,nosql反之
sql支持事務性,nosql不支持

redis特性mysql

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它能夠用做數據庫、緩存和消息中間件
redis是c語言編寫的,支持數據持久化,是key-value類型數據庫。
應用在緩存,隊列系統中
redis支持數據備份,也就是master-slave模式

redis 優點linux

性能高,讀取速度10萬次每秒
寫入速度8萬次每秒
全部操做支持原子性

用做緩存數據庫,數據放在內存中
替代某些場景下的mysql,如社交類app
大型系統中,能夠存儲session信息,購物車訂單

 

 

安裝 redis

 

1yum 安裝   2檢測redis 是否工做

#前提得配置好阿里雲yum源,epel源
#查看是否有redis包
yum list redis
#安裝redis
yum install redis -y
#安裝好,啓動redis
systemctl start redis




redis-cli    #redis 客戶端工具
#進入交互式環境後,執行ping,返回pong表示安裝成功
127.0.0.1:6379> ping
PONG

源碼安裝  編譯安裝nginx

編譯安裝的優點是:redis

編譯安裝時能夠指定擴展的module(模塊),php、apache、nginx都是同樣有不少第三方擴展模塊,如mysql,編譯安裝時候,若是須要就定製存儲引擎(innodb,仍是MyIASM)sql

編譯安裝能夠統一安裝路徑,linux軟件約定安裝目錄在/opt/下面數據庫

軟件倉庫版本通常比較低,編譯源碼安裝能夠根據需求,安裝最新的版本apache

 安裝前 記得刪除原有的redis
1.下載redis源碼
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮
tar -zxf redis-4.0.10.tar.gz
3.切換redis源碼目錄
cd redis-4.0.10.tar.gz
4.編譯源文件
make 
5.編譯好後,src/目錄下有編譯好的redis指令
6.make install 安裝到指定目錄,默認在/usr/local/bin

redis 可執行文件api

./redis-benchmark //用於進行redis性能測試的工具
./redis-check-dump //用於修復出問題的dump.rdb文件
./redis-cli //redis的客戶端
./redis-server //redis的服務端
./redis-check-aof //用於修復出問題的AOF文件
./redis-sentinel //用於集羣管理

redis.conf 核心配置項緩存

綁定ip,如須要遠程訪問,須要填寫服務器ip
bind 127.0.0.1  

端口,redis啓動端口
port 

守護進程方式運行
daemonize yes

rdb數據文件
dbfilename dump.rdb

數據文件存放路徑
dir /var/lib/redis/

日誌文件
logfile /var/log/redis/redis-server.log

主從複製
slaveof 
舉例:
第一種方法:
redis的安裝方式
1.yum  install  redis -y


第二種方法: 源碼編譯(在選擇編譯的時候,注意刪掉以前的yum安裝的)
1.yum remove redis -y 2.下載redis的源代碼包 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 3.解壓縮源碼包 編譯三部曲: #(此redis壓縮包,已經提供好了makefile,只須要執行,編譯的第二,第三曲) 2.執行gcc的make指令,執行makefile文件 make 3.開始安裝 make install 4.會安裝在當前的源碼包中的src目錄,且幫你配置好了PATH變量 經過redis-加上tab補全查看全部命令 redis-benchmark redis-check-rdb redis-sentinel redis-check-aof redis-cli redis-server 5.制定一個安裝可靠的redis數據庫,以下功能經過配置文件定義 1.更改端口 2.設置密碼 3.開啓redis的安全啓動模式 默認直接輸入redis-server能夠啓動服務端,默認端口6379,且沒有密碼 redis-cli登陸 redis.conf 內容以下,有多少參數,就有多少功能, bind 192.168.16.142 #綁定redis啓動的地址 protected-mode yes #開啓redis的安全模式,必須輸入密碼才能夠遠程登陸 port 6380 #指定redis的端口 daemonize no #讓redis以守護進程方式在後臺運行,不佔用窗口 pidfile /var/run/redis_6379.pid #記錄redis的進程id號的文件 loglevel notice #日誌運行等級 .嚴重級別,警告級別,debug調試界別.....logging requirepass haohaio #設置redis的密碼,是 haohaio 建立新的配置文件
grep -v '^#' redis.conf |grep -v '^$' > ./s20.conf
指定配置文件的啓動方式 redis
-server s20redis.conf #此時登陸redis必須加上參數了,而且登陸了以後,必須輸入密碼纔可使用 redis-cli -p 6380 -h 192.168.16.142

auth 密碼

啓動服務端  客戶端

啓動redis很是簡單,直接./redis-server就能夠啓動服務端了,還能夠用下面的方法指定要加載的配置文件:
./redis-server ../redis.conf
默認狀況下,redis-server會以非daemon的方式來運行,且默認服務端口爲6379。




#執行客戶端命令便可進入
./redis-cli  
#測試是否鏈接上redis
127.0.0.1:6379 > ping
返回pong表明鏈接上了

//用set來設置key、value
127.0.0.1:6379 > set name "chaoge"
OK
//get獲取name的值
127.0.0.1:6379 > get name
"chaoge"

 

redis 數據結構

redis是一種高級的key:value存儲系統,其中value支持五種數據類型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)

基本命令

keys *         查看全部key
type key      查看key類型
expire key seconds    過時時間
ttl key     查看key過時剩餘時間        -2表示key已經不存在了
persist     取消key的過時時間   -1表示key存在,沒有過時時間

exists key     判斷key存在    存在返回1    不然0
del keys     刪除key    能夠刪除多個
dbsize         計算key的數量

數據結構

1 strings 類型

set   設置key
get   獲取key
append  追加string
mset   設置多個鍵值對
mget   獲取多個鍵值對
del  刪除key
incr  遞增+1
decr  遞減-1

 

127.0.0.1:6379> set name 'yu'   #設置key
OK
127.0.0.1:6379> get name    #獲取value
"yu"
127.0.0.1:6379> set name 'yuchao'  #覆蓋key
OK
127.0.0.1:6379> get name    #獲取value
"yuchao"
127.0.0.1:6379> append name ' dsb'   #追加key的string
(integer) 10
127.0.0.1:6379> get name  #獲取value
"yuchao dsb"


127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi'    #設置多個鍵值對
OK
127.0.0.1:6379> get user1    #獲取value
"alex"
127.0.0.1:6379> get user2    #獲取value
"xiaopeiqi"
127.0.0.1:6379> keys *      #找到全部key
1) "user2"
2) "name"
3) "user1"

127.0.0.1:6379> mget user1 user2 name   #獲取多個value
1) "alex"
2) "xiaopeiqi"
3) "yuchao dsb"
127.0.0.1:6379> del name        #刪除key
(integer) 1
127.0.0.1:6379> get name        #獲取不存在的value,爲nil
(nil)
127.0.0.1:6379> set num 10    #string類型實際上不只僅包括字符串類型,還包括整型,浮點型。redis可對整個字符串或字符串一部分進行操做,而對於整型/浮點型可進行自增、自減操做。
OK    
127.0.0.1:6379> get num
"10"
127.0.0.1:6379> incr num    #給num string 加一 INCR 命令將字符串值解析成整型,將其加一,最後將結果保存爲新的字符串值,能夠用做計數器
(integer) 11
127.0.0.1:6379> get num  
"11"

127.0.0.1:6379> decr num      #遞減1  
(integer) 10
127.0.0.1:6379> decr num    #遞減1
(integer) 9
127.0.0.1:6379> get num
"9"

 

list 類型

lpush         從列表左邊插
rpush         從列表右邊插
lrange          獲取必定長度的元素  lrange key  start stop
ltrim               截取必定長度列表
lpop                 刪除最左邊一個元素
rpop                     刪除最右邊一個元素
lpushx/rpushx                key存在則添加值,不存在不處理
lpush duilie 'alex' 'peiqi' 'ritian'  #新建一個duilie,從左邊放入三個元素

llen duilie  #查看duilie長度

lrange duilie 0 -1  #查看duilie全部元素

rpush duilie 'chaoge'   #從右邊插入chaoge

lpushx duilie2  'dsb'  #key存在則添加 dsb元素,key不存在則不做處理

ltrim duilie 0 2  #截取隊列的值,從索引0取到2,刪除其他的元素

lpop #刪除左邊的第一個
rpop #刪除右邊的第一個

set 集合類型

redis的集合,是一種無序的集合,集合中的元素沒有前後順序。

集合相關的操做也很豐富,如添加新元素、刪除已有元素、取交集、取並集、取差集等。咱們來看例子:

sadd/srem   添加/刪除 元素
sismember   判斷是否爲set的一個元素
smembers    返回集合全部的成員
sdiff             返回一個集合和其餘集合的差別
sinter           返回幾個集合的交集
sunion          返回幾個集合的並集
sadd zoo  wupeiqi yuanhao  #添加集合,有三個元素,不加引號就當作字符串處理

smembers zoo  #查看集合zoo成員

srem zoo  wupeiqi #刪除zoo裏面的alex

sismember zoo wupeiqi  #返回改是不是zoo的成員信息,不存在返回0,存在返回1

sadd zoo wupeiqi   #再把wupeiqi加入zoo

smembers zoo  #查看zoo成員

sadd zoo2 wupeiqi mjj #添加新集合zoo2

sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中沒有的元素

sdiff zoo2  zoo  #找出zoo2中有,而zoo沒有的元素

sinter zoo zoo1   #找出zoo和zoo1的交集,都有的元素

sunion  zoo zoo1  #找出zoo和zoo1的並集,全部的不重複的元素

有序集合

都是以z開頭的命令

用來保存須要排序的數據,例如排行榜,成績,工資等。

實例

利用有序集合的排序,排序學生的成績
127.0.0.1:6379> ZADD mid_test 70 "alex"
(integer) 1
127.0.0.1:6379> ZADD mid_test 80 "wusir"
(integer) 1
127.0.0.1:6379> ZADD mid_test 99 "yuyu"
排行榜,zrevrange 倒敘   zrange正序


127.0.0.1:6379> ZREVRANGE mid_test 0 -1 withscores
1) "yuyu"
2) "99"
3) "wusir"
4) "80"
5) "xiaofneg"
6) "75"
7) "alex"
8) "70"
127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
1) "alex"
2) "70"
3) "xiaofneg"
4) "75"
5) "wusir"
6) "80"
7) "yuyu"
8) "99"

 

哈希數據結構

哈希結構就是  k1   ->  k1 : v1     如同字典 套字典  { k1 : { k2: v2 }  }   ,取出v2 必須  k1,取出k2

hashes即哈希。哈希是從redis-2.0.0版本以後纔有的數據結構。

hashes存的是字符串和字符串值之間的映射,好比一個用戶要存儲其全名、姓氏、年齡等等,就很適合使用哈希。

hset 設置散列值
hget  獲取散列值
hmset  設置多對散列值
hmget  獲取多對散列值
hsetnx   若是散列已經存在,則不設置(防止覆蓋key)
hkeys     返回全部keys
hvals     返回全部values
hlen      返回散列包含域(field)的數量
hdel     刪除散列指定的域(field)
hexists    判斷是否存在

 

redis hash是一個string類型的field和value的映射表

語法  hset key field value  

hset news1   title "first news title" #設置第一條新聞 news的id爲1,添加數據title的值是"first news title"

hset news1 content "news content"    #添加一個conntent內容

hget news1 title   #獲取news:1的標題

hget news1  content  #獲取news的內容

hmget news1  title content   #獲取多對news:1的 值

hmset news2 title "second news title" content "second Contents2"   #設置第二條新聞news:2 多個field

hmget news2 title  content #獲取news:2的多個值

hkeys news1   #獲取新聞news:1的全部key

hvals news1   #獲取新聞news:1的全部值

hlen news1    #獲取新聞news:1的長度

hdel news1 title   #刪除新聞news:1的title

hlen news1     #看下新聞news:1的長度

hexists news1 title    #判斷新聞1中是否有title,不存在返回0,存在返回1
相關文章
相關標籤/搜索