Redis From Ubuntu?
Preface *Jack Lee*
Redis是由意大利人Salvatore Sanfilippo(網名:antirez)開發的一款內存高速緩存數據庫。Redis全稱爲:Remote Dictionary Server,該軟件使用C語言編寫,Redis是一個key-value存儲系統,它支持豐富的數據類型,如:string、list、set、zset(sorted set)、hash。
Redis特點:
Redis以內存作爲數據存儲介質,所以讀寫數據的效率極高,遠遠超過數據庫。
Redis應用場景:
因爲Redis交換數據快,所以在服務器中常用來存儲一些需要頻繁調取的數據,這樣可以大大節省系統直接讀取磁盤來獲得數據的I/O開銷,更重要的是可以極大提升速度。
將這種熱點數據存到Redis(內存)中,要用的時候,直接從內存取,極大的提高了速度和節約了服務器的開銷。
注意: Redis中的數據以鍵值對的形式來存數據, 如果再次創建相同的Key會出現覆蓋.
Redis默認有16個數據庫, 使用SELEECT index
來切換數據庫.
Getting Start
- Windows
到下載地址https://github.com/MSOpenTech/redis/releases
下載對應的文件, 然後解壓到相應文件夾.
運行redis: redis-server.exe
redis.windows.conf
(後面的配置文件也可以不加.)
- Ubuntu
sudo apt-get update
sudo apt-get install redis-server
redis-server # 啓動redis
redis-cli # 進入redis, redis-cli --raw(表示使用的配置文件, 不加表示使用默認的.)
Redis DATA_TYPE
- string: 字符串
- list: 列表
- hash: 哈希(Just like this: key {key:value} )
- set: 集合
- sorted sets: 有序集合(會設置一個分數, 來進行區分)
String Operation
# 設置string類型的key-value.
set key value # eg: set lls1 'shuai'
# 獲取key對應的value. 注意key應該是唯一的, 再次set時不應使用已有的key不然會覆蓋.
get key # eg: get lls1
# 給某個key追加新value.
append key value # eg: append lls1 'age18'
# set more string(KV).
mset key value key value... # eg: set lls1 'shuai' lls2 'age18'
# get more string(KV).
mget key key key.... # eg: mget lls1 lls2
# show all key.
keys *
# del a key.
del key # eg: del lls1
# check a key if exists(存在), if 1, if not 0.
exists key # eg: exists lls1
# check key type.
type key # eg: type lls2
# 計算, althrough value is string, but redis will check the string-content.
# 加 1 .
set key value # set num '1'
incr key # eg: incr num
get key
# 減 1 .
decr key # eg: decr num
get key
# 自定義加數.
incrby key increment # eg: incrby num 50
get key
# 自定義減數.
decrby key decrement # eg: decrby num 50
# 查看key-value過期時間(可以設置時間讓對象過期消逝.)
ttl key # eg: ttl lls1
# 給某個KV設置過期時間.
expire key seconds # eg: expire lls2 2 2秒
# 在set KV 時設置time.
set key value ex seconds # eg: set lls2 'shuai' ex 2
List Operation
# stack?
# 設置(lpush=>left push)KV list, 像queue一樣, 左進向右擠.
lpush key value1 value2... # eg: lpush lls1 'shuai'
# 把KV加到最後一個, 右進向左擠.
rpush key value1.... # eg: rpush lls2 'age18'
# show a key all value. 0 -1 表示索引, first element index: 0, last element index: -1.
lrange key 0 -1 # eg: lrange lls1 0 -1
# get list length(element amount).
llen key # eg: llen lls1
# get one-element of the list.
lindex key index # eg: lindex lls1 0
# del one-element of left.
lpop key # eg: lpop lls1
# del one-element of right.
rpop key # eg: rpop lls1
# 自定位置或批量刪除數據, 從左至右(從上至下).
rpush lls1 a1 a2 a3 a4 a5 a1 a4 a2 a2
lrem key count value # eg: lrem lls1 1 a1
# 這裏要注意一下, count爲 0 時表示刪除list中所有指定的value,
# count > 0時, 表示刪除list中count個指定的value.
# count < 0時, 表示從右向左找數據來進行刪除操作, 刪除的數量爲count, eg: -1 表示刪除一個, -2 表示兩個.
Hash Operation
- like this=> key={key: value}
# set hash key-field-value. field-value可以設置多個, 但是不能在條命令追加 field-vlaue.
hset key field value # eg: hset lls1 face 'shuai'
# get hash ..value.
hget key filed # eg: hget lls1 face
# del hash ..value. 可以在後面追加field 來刪除多個. 刪除後可以hget field但是沒數據返回.
hdel key field # eg: hdel lls2 face
# set more key-field-value.
hmset key field1 value1 field2 value2...
# get more ..value.
hmget key field field...
# get all .field-value.
hgetall key # eg: hgetall lls2
# get all .field.
hkeys key # eg: hkeys lls2
# get all ..value.
hvals key # eg: hvals lls2
# get .field amount(length).
hlen key # eg: hlen lls2
Set Operation
- 集合: 具有集合特性.
# set KV. 可以設置多個value.
sadd key value1 value2.... # eg: sadd set_lls lls1 lls2 lls3
# get a key of values.
smembers key # eg: smembers set_lls
# 指定刪除.
srem key member # eg: srem set_lls lls1
# 隨機刪除.
spop key # eg: spop set_lls
# 移動old集合的(member)值到另一個集合. 注意這裏是移動.
smove oldkey newkey member # eg: smove set_lls new_lls lls2
# 判斷集合的某個值是否exists(存在). 返回 1 , 0
sismember key member # eg: sismember set_lls lls5
# 獲取交集.
sinter key1 key2... # eg: sinter set_lls new_lls
# 將交集賦給另一個集合.
sinterstore newkey key1 key2 # eg: sinterstore new_new_lls set_lls new_lls
# get並集. 把並集扔給另一個集合的命令如同上.
sunion key1 key2... # eg: sunion set_lls new_lls
# get差集. 把差集扔給另一集合的命令如同上上.
sdiff key1 key2 # eg: sdiff set_lls new_lls
# get集合中值的個數.
scard key # eg: scard set_lls
# 隨機返回一個值, count可加也可不加, 不加默認返回一個, 加了返回count個.
srandmember key [.count] # eg: srandmember set_lls
Zset Operation
# 設置KCM.
zadd key score1 member1.... # eg: zdd z_lls 1 'one' 2 'two' 3 'three'
# 獲取(zrange)正序.
zrange key 0 -1 # eg: zrange z_lls 0 -1
# 獲取(zrevrange)倒序.
zrevrange key 0 -1 # eg: zrevrange z_lls 0 -1
# 刪除.member.
zrem key member # eg: zrem z_lls 'two'
# 獲得索引-正序.
zrank key member # eg: zrank z_lls 'one'
# 獲得索引-反序.
zrevrank key member # eg: zrevrank z_lls 'one'
# 查看score值.
zscore key member # eg: zscore z_lls 'one'
# 修改score. 自增score.
zincrby key score member # eg: zincrby z_lls 1 'one'
# 查看元素個數.
zcard key # eg: zcard z_lls
# 返回集合中score在給定區間的元素.
zrangebyscore key score score withscore # eg: zrangebyscore z_lls 1 3 withscore
# 返回集合中score在給定區間的元素數量.
zcount key score score # eg: zcount z_lls 1 3
# 刪除集合中排名在給定區間的元素.
zremrangebyrank key inex inex # eg: zremrangebyrank z_lls 0 2
# 刪除集合中 score 在給定區間的元素.
zremrangebyscore key score score # eg: zremrangebyscore z_lls 1 2
Redis 發佈(Publish)和訂閱(Subscribe)
# 訂閱
subscribe 頻道
# 發佈
publish 頻道 消息
DELECT KEY
# 刪除當前數據庫中的鍵.
FLUSHDB
# 刪除所有數據庫中的鍵.
FLUSHALL
DATA Persistence
- RDB: 設置條件, 條件出觸發後把數據存入到對應文件中. 類似快照.
- AOF: 手動使用寫命令, 將數據保存到對應文件中.