寫給Java程序員看的Redis教程-------第三章.Redis命令

1. 字符串的命令

​ Redis的字符串就是一個由字節組成的序列。

​ 其完全兼容整數和浮點數,提供了自增和自減操作。

​ 在需要的時候,Redis 還會將整數轉化成浮點數。整數的取值範圍和系統的長整數的取值範圍相同(即32/64位上位32/64位有符號整數)

## 測試 string 支持int,並測試 incr 自增命令
127.0.0.1:6379> set val1 123
OK
# 測試 incr 命令自增
127.0.0.1:6379> incr val1
(integer) 124
127.0.0.1:6379> get val1
"124"
# 測試decr 命令自減
127.0.0.1:6379> decr val1
(integer) 123
127.0.0.1:6379> get val1
"123"
# 測試加法 val1 = val1 + amount(100)
127.0.0.1:6379> incrby val1 100
(integer) 223
# 測試減法 val1 = val1 - amount(100)
127.0.0.1:6379> decrby val1 		100
(integer) 123
## PS :對一個不存在的值進行加法操作,其默認值爲0
127.0.0.1:6379> incrby val10086 1000
(integer) 1000
127.0.0.1:6379> get val10086
"1000"

對於Jedis版本則是更面向對象一點。

class StringOpreation {
    /**
     * 只簡單測試一個命令,節省板塊
     */
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        // 如果有密碼的話
       //  jedis.auth("test123");
        String key = "java_val";
        jedis.incr(key);
        System.out.println(jedis.get(key));	// 1
        jedis.incrBy(key, 100);
        System.out.println(jedis.get(key));	// 100
    }
}

2. 列表的操作

複習list操作.

127.0.0.1:6379> rpush list-key last
(integer) 1
127.0.0.1:6379> lpush list-key first
(integer) 2
127.0.0.1:6379> rpush list-key "new last"
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1
1) "first"
2) "last"
3) "new last"
# 修剪 左邊數下標 1 之前的元素。
127.0.0.1:6379> ltrim list-key 1 -1
OK
127.0.0.1:6379> lrange list-key 0 -1
1) "last"
2) "new last"
127.0.0.1:6379> 

阻塞彈出和彈出並推入命令

127.0.0.1:6379> rpush list item1 item2
(integer) 1
127.0.0.1:6379> rpush list2 item3
(integer) 1
# 初始化list = {item1 <---> item2}
# list2 = {item3}
127.0.0.1:6379> brpoplpush list2 list 1
"item3"
127.0.0.1:6379> lrange list 0 -1
1) "item3"
2) "item1"
3) "item2"
127.0.0.1:6379> lrange list2 0 -1
(empty list or set)
# 執行 brpoplpush 後變爲了 list = {item3 <---> item1 <---> item2}, list2 = empty;

記憶: b = block ,阻塞操作

rpop = 從右推出前列表

lpush = 從左推入列表元素。

阻塞命令主要用於消息傳遞和任務列表。

3.集合

# 複習常見操作
127.0.0.1:6379> sadd set-key a b c 
(integer) 3
127.0.0.1:6379> srem c d
(integer) 0
127.0.0.1:6379> srem c d
(integer) 0
127.0.0.1:6379> sadd set-key c d
(integer) 1
127.0.0.1:6379> sadd set-key c d
(integer) 0
127.0.0.1:6379> smembers set-key
1) "b"
2) "d"
3) "c"
4) "a"
127.0.0.1:6379> smove set-key set-key2 a
(integer) 1
127.0.0.1:6379> smove set-key set-key2 c
(integer) 1
127.0.0.1:6379> smove set-key set-key2 c
(integer) 0
127.0.0.1:6379> SMEMBERS set-key2
1) "a"
2) "c"
127.0.0.1:6379> 

差集運算,交集運算,並集運算

127.0.0.1:6379> sadd skey1 a b c d
(integer) 4
127.0.0.1:6379> sadd skey2 c d e f
(integer) 4
# 求差集,只求skey1中有,skey2中沒有的
127.0.0.1:6379> sdiff skey1 skey2
1) "a"
2) "b"
# 交集
127.0.0.1:6379> sinter skey1 skey2
1) "d"
2) "c"
# 並集
127.0.0.1:6379> sunion skey1 skey2
1) "e"
2) "d"
3) "a"
4) "b"
5) "c"
6) "f"

4. 散列

127.0.0.1:6379> hmset hash-key k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> hmget hash-key k2 k3
1) "v2"
2) "v3"
127.0.0.1:6379> hlen hash-key
(integer) 3
127.0.0.1:6379> hdel hash-key k1 k3
(integer) 2
127.0.0.1:6379> hkeys hash-key
1) "k2"
127.0.0.1:6379> hexists hash-key k1
(integer) 0
127.0.0.1:6379> hexists hash-key k2
(integer) 1
127.0.0.1:6379> hincrby hash-key k1 2
(integer) 2
127.0.0.1:6379> hget hash-key k1
"2"
127.0.0.1:6379> hexists hash-key k1
(integer) 1

5. 有序集合

# 按照分數放入 3->a 2->b 1->c
127.0.0.1:6379> zadd zset-key 3 a 2 b 1 c
(integer) 3
# 得到集合的大小
127.0.0.1:6379> zcard zset-key
(integer) 3
127.0.0.1:6379> zincrby zset-key 3 c
"4"
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "b"
2) "2"
3) "a"
4) "3"
5) "c"
6) "4"
# 得到b 的分數
127.0.0.1:6379> zscore zset-key b
"2"
# 得到c 的排名
127.0.0.1:6379> zrank zset-key c
(integer) 2
# 0-3分數的個數
127.0.0.1:6379> zcount zset-key 0 3
(integer) 2
# 移除 b
127.0.0.1:6379> zrem zset-key b
(integer) 1
# 排序,帶分數。
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "a"
2) "3"
3) "c"
4) "4"

6. 發佈與訂閱

​ 一般來說,發佈與訂閱的特點是訂閱者負責訂閱頻道,發送者負責向頻道發送二進制字符串消息。

首先先開一個redis-cli窗口訂閱(等會再開一個發佈)

127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1

這時,這裏就不動了,也是訂閱成功了,我們去在開啓一個redis-cli去發佈。

127.0.0.1:6379> PUBLISH  redisChat "Redis is good"
(integer) 1
# 此時,訂閱的窗口已經刷新了數據哦
127.0.0.1:6379> PUBLISH redisChat "Learn redis by guo_dao"
(integer) 1
# 此時,訂閱的窗口又刷新了數據

訂閱窗口刷新出來的數據:

1) "message"
2) "redisChat"
3) "Redis is good"
# ------------------------------------------分割線------------------------------------------
1) "message"
2) "redisChat"
3) "Learn redis by guo_dao"

7 事務

Redis 事務可以一次執行多個命令

# 開始準備事務
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET book-name "mastering java in 21 days"
QUEUED
127.0.0.1:6379> GET book-name
QUEUED
127.0.0.1:6379> SADD tag "Java" "Programing" "Mastering Series"
QUEUED
127.0.0.1:6379> SMEMBERS tag
QUEUED
# 開始逐個執行事務
127.0.0.1:6379> EXEC
1) OK
2) "mastering java in 21 days"
3) (integer) 3
4) 1) "Mastering Series"
   2) "Java"
   3) "Programing"

Redis的事務並不會回滾,redis是一個單線程應用,所以對於redis來說:

當服務器收到一個客戶端提交的事務,那麼服務器將只執行這個客戶端發送的事務,挨個執行其中的命令,直到事務結束,然後服務器纔回到原來的狀態。

8.鍵的過期時間

# 初始化
127.0.0.1:6379> set key v
OK
# 設置過期時間,單位爲second
127.0.0.1:6379> expire key 2
(integer) 1
# 等待兩秒後,get不到,說明過期了
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> set key v
OK
127.0.0.1:6379> expire key 10
(integer) 1
# ttl 查看還有多久過期
127.0.0.1:6379> ttl key
(integer) 5
# second
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章