Redis

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: 手動使用寫命令, 將數據保存到對應文件中.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章