redis(1)
安裝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)