日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Redis入門,我是認真的

 過河卒沖 2020-05-08

說起來,可能有些小伙伴會不相信,我是第一次用 Redis,真的。因為公司小,業(yè)務(wù)量小,Redis 根本派不上用場。不過,最近打算把系統(tǒng)升級一下,順帶把當(dāng)下時髦的技術(shù)入個門,“與時俱進”嘛,雖然進的有“一點點”晚(注意雙引號)。

作為一名富有責(zé)任心的技術(shù)博主,我覺得有必要把我入門 Redis 的過程分享出來,供一些小伙伴作為參考。要是我哪里寫錯了,別客氣,過來給我一巴掌,就行了(溫柔點,別打腫,影響顏值就不好了)。

01、Redis 是什么

Redis 是互聯(lián)網(wǎng)技術(shù)領(lǐng)域中使用最廣泛的存儲中間件,它是 Remote Dictionary Service 三個單詞中加粗字母的組合。你別說,組合起來后念著挺自然的。

Redis 以超高的性能、完美的文檔、簡潔的源碼著稱,國內(nèi)外很多大型互聯(lián)網(wǎng)公司都在用,比如說阿里、騰訊、GitHub、Stack Overflow 等等。它的版本更新非常的快,功能也越來越強大,最初只是用來作為緩存數(shù)據(jù)庫,現(xiàn)在已經(jīng)可以用它來實現(xiàn)消息隊列了。

可以這么說吧,掌握 Redis 已經(jīng)變成了一項后端工程師必須具備的基礎(chǔ)技能。

Redis 的作者是一名意大利人,網(wǎng)名 Antirez,長相還是過得去的,感興趣的小伙伴可以 Google 一下。知道為什么 Redis 的默認端口是 6379 嗎?

據(jù)說是手機鍵盤上“MERZ”的位置決定的,小伙伴們可以打開自己手機上九宮格鍵盤感受一下?!癕ERZ”是什么意思呢?據(jù)說是“愚蠢”的意思。這?是不是感覺程序員的生活中還是有蠻多神秘色彩的?

02、安裝 Redis

Redis 針對不同的操作系統(tǒng)有不同的安裝方式,我們這篇入門的文章就以 Windows 為例吧。

下載地址如下:

https://github.com/MicrosoftArchive/redis/releases

最新的版本是 3.2.100。從下圖中可以看得出,Redis 的體積非常的輕量級,還不到 6 M。體積越小,讓我感覺 Redis 越牛逼,你是不是也有這種感覺?

有兩種安裝方式,第一種是 msi 的方式,雙擊運行后安裝;第二種是免安裝,綠色版,只需要把 zip 包解壓就可以了。

里面有一份英文版的文檔——Windows Service Documentation.docx,教我們?nèi)绾伟惭b Redis 服務(wù)、如何啟動、如何關(guān)閉,以及如何使用自定義端口啟動服務(wù)。

打開命令行,進入到當(dāng)前解壓后的目錄,輸入啟動命令:

redis-server redis.windows.conf

然后你就會看到 Redis 啟動后的歡迎畫面,左邊這個盒子感覺好有藝術(shù)感啊!有小伙伴知道是怎么生成的嗎?

還有一些其他的提示信息:

  • Redis 當(dāng)前的版本號為 3.2.100

  • 端口是 6379

  • 進程 ID,也就是 PID 為 12636

  • Redis 官方地址為:http://

那如何停止服務(wù)呢?可以直接按下 Ctrl+C 組合鍵——粗暴、壁咚。

03、Redis 的數(shù)據(jù)結(jié)構(gòu)

Redis 有 5 種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),String、Hash、List、Set、SortedSet,也是學(xué) Redis 必須掌握的。除此之外,還有 HyperLogLog、Geo、Pub/Sub,算是高級數(shù)據(jù)結(jié)構(gòu)了。我們這篇入門的文章就以 String 為例吧。

String 結(jié)構(gòu)使用非常廣泛,比如說把用戶的登陸信息轉(zhuǎn)成 JSON 字符串后緩存起來,等需要取出的時候再反序列化一次。

小伙伴們應(yīng)該都知道,Java 的 String 是不可變的,無法修改。Redis 的 String 是動態(tài)的,可以修改的,兩者不同哦。關(guān)于 Redis 的 String 結(jié)構(gòu),我覺得老錢的 Redis 教程上講得非常明白,大家一起拜讀下。

Redis 的 String 在內(nèi)部結(jié)構(gòu)實現(xiàn)上類似于 Java 的 ArrayList,采用預(yù)分配冗余空間的方式來減少內(nèi)存的頻繁分配。如上圖所示,當(dāng)前字符串實際分配的空間為 capacity,一般高于實際的字符串長度 len。當(dāng)字符串長度小于 1M 時,擴容是對現(xiàn)有空間的成倍增長;如果長度超過 1M 時,擴容一次只會多增加 1M 的空間。最大長度為 512M。

04、實操 Redis

好了好了,我估計很多小伙伴們已經(jīng)整裝待發(fā),準備實操一把了。這就來。

Redis 的解壓目錄下有一個名叫 redis-cli.exe 的文件,這是 Redis 自帶的一個客戶端工具,可以用來連接之前我們啟動好的 Redis 服務(wù)。雙擊啟動它。

這個客戶端還是非常智能的,當(dāng)鍵入命令的時候,會跳出對應(yīng)的提示

當(dāng)按下空格跟進關(guān)鍵字的時候,對應(yīng)位置上的提示會自動消失。

以下是完整的鍵值對測試命令,小伙伴們可以按照格式動手實操一把。

> set name cmower
OK
> get name
'cmower'
> exists name
(integer) 1
> del name
(integer) 1
> get name
(nil)

1)set 命令用來存儲一個鍵值對,在本例中,name 為 key,cmower 為 值。

2)get 命令用來獲取一個鍵值對。

3)exists 命令用來測試一個鍵值對是否存在,(integer) 1 表示存在,(integer) 0 表示不存在。

4)del 命令用來刪除一個鍵值對,(integer) 1 表示執(zhí)行成功,(integer) 0 表示執(zhí)行失敗。

5)當(dāng)鍵值對刪除后,再通過 get 命令獲取時,結(jié)果就為 (nil) 。

可能有小伙伴會好奇,nil 是什么意思?它是 Objective-C、Swift、Ruby、Lua 等編程語言中的一個關(guān)鍵字,更詳細的解釋可以看一下《Programming in Lua 程序設(shè)計第二版》:

nil 是一種類型,它只有一個值 nil,它的主要功能是用于區(qū)別其他任何值,就像之前所說的,一個全局變量在第一次賦值前的默認值就是 nil,將 nil 賦予一個全局變量等同于刪除它,Lua 將 nil 用于表示一種“無效值(non-value)”的情況,即沒有任何有效值的情況。

想了解 Redis 命令的具體使用方法,可以參考以下鏈接:

http:///index.html

是 Redis Command Reference 和 Redis Documentation 的中文翻譯版,良心吧?

05、在 Java 中使用 Redis

有些小伙伴可能會問,“二哥,我是一名 Java 程序員,我該如何在 Java 中使用 Redis 呢?”這個問題問得好,這就來,這就來。

第一步,在項目中添加 Jedis(Java 和 Redis 的混拼) 依賴:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>

第二步,新建 UserInfo(用戶信息)類:

public class UserInfo {
    private String name;
    private int age;

    public UserInfo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return 'UserInfo{' +
                'name='' + name + '\'' +
                ', age=' + age +
                '}';
    }

    // getter / setter
}

第三步,在項目中添加 Gson(用于序列化和反序列化用戶信息) 依賴:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
    <scope>compile</scope>
</dependency>

第四步,新建測試類 RedisTest:

public class RedisTest {
    private static final String REDIS_KEY = 'user';
    public static void main(String[] args) {
        Jedis jedis = new Jedis('localhost'6379);

        Gson gson = new Gson();
        UserInfo userInfo = new UserInfo('沉默王二'18);

        jedis.set(REDIS_KEY, gson.toJson(userInfo));
        UserInfo getUserInfoFromRedis = gson.fromJson(jedis.get(REDIS_KEY),UserInfo.class);

        System.out.println('get:' + getUserInfoFromRedis);

        System.out.println('exists:' + jedis.exists(REDIS_KEY));
        System.out.println('del:' + jedis.del(REDIS_KEY));
        System.out.println('get:' + jedis.get(REDIS_KEY));
    }
}

1)REDIS_KEY 常量為存儲用戶信息到 Redis 的 key。

2)在 Jedis 的幫助下,Java 連接 Redis 服務(wù)變得非常簡單,只需要一行代碼:

Jedis jedis = new Jedis('localhost'6379);

參數(shù)分別是主機名,端口號。

存儲鍵值對用 set() 方法,獲取鍵值對用 get() 方法,判斷鍵值對是否存在用 exists() 方法,刪除鍵值對用 del() 方法。

3)Gson 是谷歌提供的一個開源庫,可以將 Java 對象序列化為 JSON 字符串,同樣可以將 JSON 字符串反序列化(解析)為匹配的 Java 對象。

使用起來也非常簡單,toJson() 方法將對象轉(zhuǎn)成 JSON 字符串,fromJson() 方法將 JSON 字符串反序列化對象。

好了,來看一下程序的輸出結(jié)果:

get:UserInfo{name='沉默王二', age=18}
exists:true
del:1
getnull

完全符合我們的預(yù)期,perfect!

06、鳴謝

好了,我親愛的小伙伴們,以上就是本文的全部內(nèi)容了,是不是看完后很想實操一把 Redis,趕快行動吧!如果你在學(xué)習(xí)的過程中遇到了問題,歡迎隨時和我交流,雖然我也是個菜鳥,但我有熱情啊。

另外,如果小伙伴想寫入門級別的文章,這篇就是最好的范例。

------------------

公眾號:沉默王二(ID:cmower)
CSDN:沉默王二
這是一個有顏值卻靠才華吃飯的程序員,你知道,他的文章風(fēng)趣幽默,讀起來就好像花錢一樣爽快。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多