一、認識Redis
- Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
- Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。
- Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因爲數據量不能大於硬件內存。
二、啓動Redis
2.1 前臺模式
redis-server
此命令將會以默認配置啓動Redis服務, 默認端口是6379
前端模式的缺點是啓動完成後,不能再進行其他操作 ,不建議使用前臺模式啓動
2.2後臺模式
如果要設置爲後臺啓動啓動就要修改此配置文件redis.conf中的daemonize爲yes。我這裏是裝在windows上的,而配置文件中表示:
所以只能換一種方法了:
- 進入redis根目錄,打開cmd窗口
- 輸入:redis-server --service-install redis.windows.conf --loglevel verbose ( 安裝redis服務 )
- 輸入:redis-server --service-start ( 啓動服務 )
- 輸入:redis-server --service-stop (停止服務)
三、連接Redis服務
連接端口爲6379 Host爲127.0.0.1的redis服務器
如果在配置文件中指定了端口號和ip地址:
redis-cli -p 端口號 -h IP
獲取日誌等級 通過CONFIG GET * 可以查看所有配置項
Redis 總共支持四個級別:debug、verbose、notice、warning,默認爲 notice
舉例設置日誌級別爲debug ,它用get、set其實是很好理解的
下面列舉一些主要的配置:
配置項 | 說明 |
---|---|
|
當客戶端閒置多長秒後關閉連接,如果指定爲 0 ,表示關閉該功能 |
|
設置數據庫的數量,默認數據庫爲0,可以使用SELECT 命令在連接上指定數據庫id |
|
指定本地數據庫文件名,默認值爲 dump.rdb |
|
指定更新日誌條件,共有 3 個可選值:
|
|
指定本地數據庫存放目錄 |
三、Redis支持的數據類型
在瞭解這些數據類型之前,先看一下幾個常用命令
keys * 查看所有key
ttl key 查看剩餘存活時間
del key 刪除key
select 5 切換到第六個數據庫
flushDB 刪除當前庫的所有數據
Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
1、string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。
實例中出現中文亂碼問題
我們把redis客戶端關閉,在cmd窗口打開 ,使用redis-cli --raw
常用命令:
指令 | 描述 |
---|---|
set | 設置一個key/value |
get | 根據key獲得對應的value |
mset | 一次設置多個key value |
mget | 一次獲得多個key的value |
getset | getset age 19獲得原始key的值,同時設置新值 |
strlen | 獲得對應key存儲value的長度 |
append | 爲對應key的value追加內容 |
getrange | 截取value的內容,對原始的值沒有影響 |
setex | setex key ex value設置一個key存活的有效期(秒) |
psetex | 設置一個key存活的有效期(豪秒) |
setnx | 只有當這個key不存在時等效set操作 |
msetnx | 可以同時設置多個key,在key不存在時有效 |
decr | 進行數值類型的-1操作 |
decrby | 根據提供的數據進行減法操作 |
incr | 進行數值類型的+1操作 |
incrby | 根據提供的數據進行加法操作 |
incrbyfloat | 根據提供的數據加入浮點數 |
2、hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。
指令 | 描述 |
---|---|
hset | 設置一個key/value對 |
hget | 獲得一個key對應的value |
hgetall | 獲得所有的key/value對 |
hdel | 刪除某一個key/value對 |
hexists | 判斷一個key是否存在 |
hkeys | 獲得所有的key |
hvals | 獲得所有的value |
hmset | 設置多個key/value |
hmget | 獲得多個key的value |
hsetnx | 設置一個不存在的key的值 |
hincrby | hincrby key k 2爲value進行加法運算 |
hincrbyfloat | 爲value加入浮點值 |
3、List是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
指令 | 描述 |
---|---|
lpush | 將某個值加入到一個key列表頭部 |
lpushx | 同lpush,但是必須要保證這個key存在 |
rpush | 將某個值加入到一個key列表末尾 |
rpushx | 同rpush,但是必須要保證這個key存在 |
lpop | 返回和移除列表的第一個元素 |
rpop | 返回和移除列表的最後一個元素 |
lrange | 獲取某一個下標區間內的元素 |
llen | 獲取列表元素個數 |
lset | lset key index value設置某一個位置的元素(替換已有的某個值) |
lindex | lindex key index獲取某一個位置的元素 |
lrem | lrem key 2 xxx從列表頭起,刪除對應個數的指定元素 |
ltrim | 保留列表中特定區間內的元素,將其他的元素刪除; |
linsert key afer/before old new | 在某一個元素之前,之後插入新元素 |
4、set集合是通過哈希表實現的
指令 | 描述 |
---|---|
sadd | 爲集合添加元素 |
smembers | 顯示集合中所有元素無序 |
scard | 返回集合中元素的個數 |
spop | 隨機返回並移除一個元素 |
smove | smove setFrom setTo xxx從一個集合中向另一個集合移動元素 |
srem | 從集合中刪除一個元素 |
sismember | sismember set77 值 判斷一個集合中是否含有這個元素 |
srandmember | 隨機返回元素,對原始數據沒有影響 |
sdiff | sdiff seta setb減去兩個集合中共有的元素 |
sinter | 求交集 |
sunion | 求並集 |
5、 zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來爲集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重複。
指令 | 描述 |
---|---|
zadd | zadd key 10 a 5 b 30 c添加一個有序集合元素,根據元素的score排序 |
zcard | 返回集合的元素個數 |
zrange | 返回一個範圍內的元素 |
zrangebyscore | 照分數查找一個範圍內的元素 |
zrank | zrank key xx返回對應元素的排名 |
zrevrank | 返回對應元素倒序排名 |
zscore | zscore key xxx顯示某一個元素的分數 |
zrem | 移除某一個元素 |
zincrby | zincrby key 10 lining給某個特定元素加分 |
四、擴展
1、在Redis中Key是二進制數,因此字符串和圖片都可以作爲Key,可以通過keys命令來查詢key
*匹配任意字符,?匹配任意一個字符
2、通過exists來判斷key是否存在 和del一樣,如果是多個key則用空格分開,結果是累計的結果。