20分鐘快速了解Redis

Redis可以說是目前最火爆的NoSQL數據庫!

?

過去幾年,Memcached很盛行,現在有很多公司已將Memcached替換成了Redis。當然,很多人替換并不清楚為什么,只是感覺不想讓主流拋棄,這也充分反映了目前Redis的強勢。

?

Redis是基于內存的數據結構存儲開源系統,采用C語言編寫,運行效率極高。可作為內存數據庫、緩存或消息代理中間件,前兩種情況實際當中使用更多些。

?

Redis與Memcached一樣,以<key,value>二元鍵值對的形式存儲數據,但與Memcached最大的不同在于Redis支持更多的數據類型,包括String、Hash、List、Set、Sorted Set等。

?

Redis目前發展很快,當前版本是3,其官方網址是:http://redis.io/ 源碼地址:https://github.com/antirez/redis

?

由于采用ANSI C編寫,Redis官方支持POSIX類型系統如linux等,Windows環境下有第三方的移植程序,但一般只做開發調試用,真正部署還是運行在linux系統上,才能發揮其威力。

?

Redis的安裝部署R

?

下面我們就在CentOS 6上進行安裝部署,具體步驟如下:

?

1.wget http://download.redis.io/releases/redis-3.0.5.tar.gz

這是當前的最新版本,可以到官網下載頁面查看最新版本或安裝以前的版本。

?

2.tar xzf redis-3.0.5.tar.gz 解壓后,cd redis-3.0.5 到Redis主目錄

?

3.make 編譯,注意可能會出現機器上缺少依賴包的提示,按提示安裝依賴包,直到make成功。

?

4.make test 運行測試,一路顯示ok通過(需要安裝TCL依賴包,見提示)。

?

?

這時在src目錄下會多出幾個可執行程序,其中redis-server是服務主程序。我們運行redis-server --help看看有哪些參數:

?

?

5. ./src/redis-server & 后臺啟動Redis,會顯示成功畫面,但會有三個警告提示。redis的提示很詳細,我們照著做修改即可。

?

echo 511 > /proc/sys/net/core/somaxconn

vim /etc/sysctl.conf 加入vm.overcommit_memory = 1

vim /etc/rc.local 加入 echo never > /sys/kernel/mm/transparent_hugepage/enabled

?

后兩個重啟生效。再次運行redis-server命令,只存在一個沒有指定config文件使用缺省配置的警告。啟動畫面如下:

?

?

我們看到,服務已啟動,監聽的端口號是6379

?

6. ./src/redis-cli 運行提供的客戶端程序,體驗下簡單操作命令。

?

?

redis所有支持命令在 http://redis.io/commands 上可以查到。

?

7. ./redis-cli shutdown 關閉redis服務。

?

8. make install 將redis命令安裝到bin目錄下,成為系統命令。

?

Redis配置參數

?

前面我們啟動redis,沒有指定配置文件,一般情況下,我們需要指定配置文件啟動。在redis主目錄下,有個redis.conf配置文件模板。cp redis.conf /etc 復制到etc目錄下。

?

redis.conf文件里的配置參數有詳細的解釋說明,下面是幾個常用參數:

?

daemonize 缺省是no, 一般使用改為yes,這樣啟動redis-server時自動是后臺運行方式。

?

port 6379 指定端口號,可以調整自己需要的端口值。

?

tcp-backlog 511 這個值就是前面需要調整somaxconn值的原因,它涉及到TCP連接時accept queue隊列的大小,是取它們的最小值。這個參數和redis高并發處理請求密切相關,根據實際運行情況調整。

?

bind 只接受來自某IP的請求,安全考慮,缺省不限制。

?

tcp-keepalive 60 主動檢測客戶端連接是否正常,官方建議是60s

?

loglevel notice 定義日志級別

logfile "" 定義日志文件位置

?

save 900 1 存儲數據到硬盤策略,這條定義的是900s內如有1個key值發生變化,就執行save存數據快照到硬盤操作。

?

dbfilename dump.rdb 指定數據快照文件名

dir ./ 指定數據快照文件目錄

?

調整好參數后,我們用redis-server /etc/redis.conf 命令啟動即可。

?

Java程序訪問Redis

?

Redis支持的客戶端操作語言非常豐富,達到40多種。就Java來說,也有很多訪問驅動實現,我們最常用的還是Jedis。

?

Jedis源碼地址: https://github.com/xetorthio/jedis 活躍度很高,能夠跟上Redis服務端發布的最新功能,而且使用簡單,基本和Redis命令行語法相似。

?

下面我們就在spring工程下簡單使用下Jedis:

?

1. pom.xml 中配置Jedis和單元測試jar包。

?

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.7.2</version>

</dependency>

?

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.10</version>

<scope>test</scope>

</dependency>

?

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring.version}</version>

<scope>test</scope>

</dependency>

?

2. spring配置xml文件配置Jedis連接服務器相關參數。

?

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">

<property name="maxTotal" value="4096"/>

<property name="maxIdle" value="200"/>

<property name="maxWaitMillis" value="3000"/>

<property name="testOnBorrow" value="true" />

<property name="testOnReturn" value="true" />

</bean>

?

<bean id="jedisPool" class="redis.clients.jedis.JedisPool">

<constructor-arg index="0" ref="poolConfig"/>

<constructor-arg index="1" value="127.0.0.1"/>

<constructor-arg index="2" value="6379" type="int"/>

</bean>

?

3. 編寫測試代碼:

?

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = "classpath:spring-test.xml")

public class RedisTest extends AbstractJUnit4SpringContextTests {

?

@Autowired

private JedisPool jedisPool;

?

@Test

public void basicOpTest(){

?

Jedis jedis = jedisPool.getResource();

?

jedis.set("person.001.name", "frank");

jedis.set("person.001.city", "beijing");

?

String name = jedis.get("person.001.name");

String city = jedis.get("person.001.city");

?

assertEquals("frank",name);

assertEquals("beijing",city);

?

jedis.del("person.001.name");

Boolean result = jedis.exists("person.001.name");

assertEquals(false,result);

?

result = jedis.exists("person.001.city");

assertEquals(true,result);

?

jedis.close();

}

}

?

eclipse下JUnit Test運行單元測試通過!

?

?

讀完本篇,你應該了解如下內容:

1.Redis是基于內存的數據存儲系統,數據以<key,value>形式存儲。value支持多種數據類型,包括String、Hash、List、Set、Sorted Set等。

?

2.Redis采用C語言開發,安裝運行在linux等POSIX系統上,windows系統上有第三方移植,可做開發測試。

?

3.Java常用的Redis客戶端編程驅動是Jedis。

?

本文摘自微信號:Java架構師

?

轉載于:https://www.cnblogs.com/jelynn/p/5192236.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458327.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458327.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

進程通信例子

from&#xff1a;https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.beginoutputreadline(vvs.80).aspx?cs-save-lang1&cs-langcsharp#code-snippet-4備注可同步或異步讀取 StandardOutput 流。Read、ReadLine 和 ReadToEnd 等方法對進程的輸出流執行…

IDEA15 下運行Scala遇到問題以及解決辦法

為了讓Scala運行起來還是很麻煩&#xff0c;為了大家方便&#xff0c;還是記錄下來&#xff1a; 1、首先我下載的是IDEA的社區版本&#xff0c;版本號為15. 2、下載安裝scala插件&#xff1a; 2.1 進入設置菜單。 2.2 點擊安裝JetBrains plugin 2.3 輸入scala查詢插件&#xff…

通過掃碼自定義鏈接安裝iOS app,版本更新總結。

1、打包ipa&#xff0c;plist工具&#xff1a;xcode6證書&#xff1a;企業級開發證書 1.1&#xff09;xcode6開始企業級打包時不在生成plist&#xff0c;需要自己編寫&#xff1a;模版見下&#xff1a; <?xml version"1.0" encoding"UTF-8"?><!…

安排與愿想

機器學習的理論學了好久了&#xff0c;對于回歸&#xff0c;分類&#xff0c;聚類&#xff0c;數據的預處理的各種算法也有了深刻認識&#xff1b; 但紙上談兵&#xff0c;沒有意義&#xff1b; 從今天開始用起來吧&#xff0c;把各種算法的實踐以及思路記錄下來&#xff0c;附…

pdf破解版

網頁說明http://aikongke.com/3754.html1118-1805-7284-0295-8107-3663您好 親 看到您拍的寶貝了&#xff01; 鏈接&#xff1a;http://pan.baidu.com/s/1c0iE44C 密碼&#xff1a;bnyc XI版轉載于:https://www.cnblogs.com/computerMatainance/p/5192834.html

使用try-with-resources替代try finally釋放資源

2019獨角獸企業重金招聘Python工程師標準>>> 1、舊社會 Java里&#xff0c;對于文件操作IO流、數據庫連接等開銷非常昂貴的資源&#xff0c;用完之后必須及時通過close方法將其關閉&#xff0c;否則資源會一直處于打開狀態&#xff0c;直至程序停止&#xff0c;增加…

MFC模態對話框和非模態對話框

MFC中對話框有兩種形式&#xff0c;一個是模態對話框&#xff08;model dialog box&#xff09;&#xff0c;一個是非模態對話框&#xff08;modeless dialog box&#xff09;。一、模態對話框&#xff08;model dialog box&#xff09;在程序運行的過程中&#xff0c;若出現了…

平板電腦離壽終正寢還有多遠?

近期有評論稱&#xff0c;因為大尺寸智能手機越來越普及&#xff0c;小尺寸平板正遭受著越來越嚴重的沖擊&#xff0c;在這樣的背景下&#xff0c;平板廠商也紛紛轉攻超大尺寸平板市場&#xff0c;以此避開大尺寸智能手機的競爭&#xff0c;只是。這樣的策略轉變是否能扭轉平板…

Swift 與 JSON 數據

轉載自&#xff1a; http://www.cnblogs.com/theswiftworld/p/4660177.html 我們大家平時在開發 App 的時候&#xff0c;相信接觸最多的就是 JSON 數據了。只要你的 App 有讀取網絡數據的功能&#xff0c;你就免不了要與 JSON 打交道。比如你做一個新聞 App&#xff0c;你要讀取…

TeamViewer - 最好用強大的免費跨平臺遠程桌面控制軟件 (支持電腦和手機)

from&#xff1a;很早以前 LYcHEE 就提到過&#xff0c;家中的潮人爺爺奶奶每天擺弄著電腦&#xff0c;看看新聞發發郵件&#xff0c;安享晚年生活。只是意料之中的&#xff0c;電腦上莫名出現各種問題&#xff1f;不翼而飛的圖標&#xff1f;照片又忘記怎么導出了&#xff1f;…

【設計模式】7、橋接模式

橋接模式就是對一個類的方法進行抽象化&#xff0c;吧不相關的因素提取出來&#xff0c;發展出第二個類 1 package com.shejimoshi.structural.Bridge;2 3 4 /**5 * 功能&#xff1a;橋接模式使用6 * 意圖&#xff1a;將抽象部分與它的實現部分分離&#xff0c;使他們都…

hadoop HA 之 QJM

前言 本文主要通過對hadoop2.2.0集群配置的過程加以梳理&#xff0c;所有的步驟都是通過自己實際測試。文檔的結構也是根據自己的實際情況而定&#xff0c;同時也會加入自己在實際過程遇到的問題。搭建環境過程不重要&#xff0c;重要點在于搭建過程中遇到的問題&#xff0c;解…

TeamViewer免費版和付費版有什么不同

提到遠程控制軟件 TeamViewer無疑是目前業內知名度比較高的一款&#xff0c;所以說到遠程控制軟件可能大部分人首先想到的就是TeamViewer。在使用功能上&#xff0c;它支持遠程桌面控制、文件傳輸、遠程計算機鎖定、視頻會話、主控方和被控方身份互換&#xff0c;遠程管理無人執…

iOS-關于cell的重疊問題

記得很早之前遇到過一個問題&#xff0c;關于cell的重疊問題&#xff0c;現在回顧總結一下。 iOS中tableview的cell顯示是會消耗內存的&#xff0c;如果要顯示無數個cell&#xff0c;不可能把每個cell都存儲下來&#xff0c;為了解決這個問題&#xff0c;cell就用了重用機制&am…

每天一個Linux命令-ls

ls 命令在linux系統中是使用頻率最頻繁的幾個命令之一,直接使用不帶目錄名&#xff0c;是默認顯示當前目錄的文件及子目錄名稱&#xff0c;ls加指定目錄名&#xff0c;則可以查看指定目錄下的文件及子目錄名稱&#xff0c;ls不僅可以查看目錄下有哪些文件和子目錄&#xff0c;還…

halcon資料鏈接

本文轉載自xiamentingtao&#xff0c;原文地址如下&#xff1a; http://blog.csdn.net/xiamentingtao/article/details/52583787 1目錄(?)[]論壇培訓博客文檔書籍視頻論壇、培訓halcon學習網&#xff1a;http://www.ihalcon.com/鳥叔機器視覺&#xff1a;http://bbs.szvbt.com…

【代碼筆記】iOS-翻書效果的實現

代碼&#xff1a; RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…

修改TFS與本地源代碼映射路徑

使用源代碼管理資源管理器修改工作區 在“文件”菜單上單擊“源代碼管理”&#xff0c;再單擊“工作區”。 在“管理工作區”對話框的“名稱”列下&#xff0c;突出顯示要修改的工作區&#xff0c;然后單擊“編輯”。 在“編輯工作區”對話框中&#xff1a; 修改“名稱”框中…

halcon基礎知識

一、程序中的顏色&#xff1a; 綠色&#xff1a;注釋 褐色&#xff1a;控制開發 淺藍色&#xff1a;外部函數——HDevelop函數文件&#xff0c;可在所有Halcon程序中使用 深藍色&#xff1a;圖像獲取和處理 紫色&#xff1a;內部函數——本地程序函數&#xff0c;只在當前程序使…

停止過度設計,開發客戶需要的軟件

在與許多不同的團隊合作過之后&#xff0c;Greg Young發現大家做項目時經常會大幅度的過度設計。比如一個預計要開發9個月的項目&#xff0c;換個角度思考一下&#xff0c;卻可能只需要幾個星期就可以提交95%的功能。Young在最近倫敦舉行的DDD eXchange大會上著重闡述了這一點。…