1. 程式人生 > >redis(1)

redis(1)

redis

安裝redis

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

tar xzf redis-3.0.7.tar.gz

ln -s redis-3.0.7 redis

yum install gcc -y

make

##zmalloc.h:50:31: 致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄


README

說的是關於分配器allocator, 如果有MALLOC 這個 環境變量, 會有用這個環境變量的 去建立redis。

而且libc 並不是默認的 分配器, 默認的是 jemalloc, 因為 jemalloc 被證明 有更少的 fragmentation problems 比libc。

但是如果你又沒有jemalloc 而只有 libc 當然 make 出錯。 所以加這麽一個參數。

解決辦法

make MALLOC=libc

make MALLOC=libc

make

make install

redis-cli -v


redis-server /root/redis/redis.conf & (從配置文件啟動)

redis-cli -h 127.0.0.1 -p 6379

redis-cli -h 127.0.0.1 -p 6379 get hello (直接得到命令的返回結果)


#停止redis服務

redis-cli shutdown

##redis關閉的過程:斷開與客戶端的連接、持久化文件生成

##kill -9 強制殺死redis服務,不但不會做持久化操作,還會造成緩存區資源不能被優雅關閉,極端情況會造成AOF和復制丟失數據的情況

##redis還有一個參數,代表是否在關閉redis前,生成持久化文件;

redis-cli shutdown nosave|save


redis有五種數據結構,他們是鍵值對中的值,對於鍵來說有一些通用的命令

1.查看所有鍵

keys *

2.鍵總數

dbsize

3.檢查鍵是否存在

exists key

如果鍵存在返回1,不存在返回0

4.刪除鍵

del keys

del是一個通用的命令,無論值是什麽數據結構類型,del命令都可以將其刪除。

5.鍵過期

expire key seconds


ttl命令會返回鍵的剩余過期時間,他有3種返回值;

大於等於0的整數:鍵剩余的過期時間

-1:鍵沒設置過期時間

-2:鍵不存在


6.鍵的數據結構類型

type key


數據結構和內部編碼:

type命令實際返回的就是當前值的數據結構類型,他們分別是:string(字符串)、hash、list(列表)、set(集合)、zset(有序集合)

實際上每種數據結構都有自己底層的內部編碼實現,而且是多種實現,這樣會在redis會在合適的場景選擇合適的內部編碼

可以通過object encoding命令查詢編碼:

object encoding hello


redis這樣設計有兩個好處:第一,可以改進內部編碼,而對外的數據結構和命令沒有影響,這樣一旦開發出更優秀的內部編碼,無需改動外部數據結構和命令。

第二,多種內部編碼實現可以在不同場景下發揮各自的優勢,例如ziplist比較節省內存,但是在列表元素比較多的情況下,性能會有所下降,這時候redis會根據配置選項將列表類型的內部實現轉換為linkedlist.


單線程架構:

redis使用了單線程結構和I/O多路服用的模型來實現高性能的內存數據庫服務


為什麽單線程還能這麽快?

通常來講,單線程處理能力要比多線程差。

第一,純內存訪問;第二,非阻塞I/O;第三單線程避免了線程切換和競態產生的消耗。

但是單線程會有一個問題:對於每隔命令的執行時間是有要求的。如果某個命令執行過長,會造成其他命令的阻塞,對於redis這種高性能的服務來說是致命的,所以redis是面向快速執行場景的數據庫。


命令:

1、set key value [ex seconds] [px milliseconds] [nx|xx] 設置值

ex seconds:為鍵設置秒級過期時間

px milliseconds:為鍵設置毫秒級過期時間

nx:鍵必須不存在,才可以設置成功,用於添加

xx:與nx相反,鍵必須存在,才可以設置成功,用於更新

2、get key 獲取值

如果要獲取的鍵不存在,則返回nil(空)

3.批量設置值

mset key value [key value ...]

4.批量獲取值

mget key [key ...]

5.計數

incr key

incr命令用於對值做自增操作,返回結果分為三種情況:

值是不是整數,返回錯誤

值是整數,返回自增後的結果

鍵不存在,按照值為0自增,返回結果為1


不常用命令

1.追加值

append key value

append可以向字符串尾部追價值

2.字符串長度

strlen key

3.設置並返回原值

getset key value

getset和set一樣會設置值,但是不同的是,他同時會返回鍵原來的值

4.設置指定位置的字符

setrange key offeset value

5.獲取部分字符串

getrange key start end


內部編碼

字符串類型的內部編碼有3種

int:8個字節的長整型

embstr:小宇等於39個字節的字符串

raw:大於39個字節的字符串


本文出自 “李生貴的博客” 博客,轉載請與作者聯系!

redis(1)