20分钟快速了解Redis
Redis可以說是目前最火爆的NoSQL數(shù)據(jù)庫!
?
過去幾年,Memcached很盛行,現(xiàn)在有很多公司已將Memcached替換成了Redis。當(dāng)然,很多人替換并不清楚為什么,只是感覺不想讓主流拋棄,這也充分反映了目前Redis的強(qiáng)勢。
?
Redis是基于內(nèi)存的數(shù)據(jù)結(jié)構(gòu)存儲開源系統(tǒng),采用C語言編寫,運(yùn)行效率極高。可作為內(nèi)存數(shù)據(jù)庫、緩存或消息代理中間件,前兩種情況實(shí)際當(dāng)中使用更多些。
?
Redis與Memcached一樣,以<key,value>二元鍵值對的形式存儲數(shù)據(jù),但與Memcached最大的不同在于Redis支持更多的數(shù)據(jù)類型,包括String、Hash、List、Set、Sorted Set等。
?
Redis目前發(fā)展很快,當(dāng)前版本是3,其官方網(wǎng)址是:http://redis.io/ 源碼地址:https://github.com/antirez/redis
?
由于采用ANSI C編寫,Redis官方支持POSIX類型系統(tǒng)如linux等,Windows環(huán)境下有第三方的移植程序,但一般只做開發(fā)調(diào)試用,真正部署還是運(yùn)行在linux系統(tǒng)上,才能發(fā)揮其威力。
?
Redis的安裝部署R
?
下面我們就在CentOS 6上進(jìn)行安裝部署,具體步驟如下:
?
1.wget http://download.redis.io/releases/redis-3.0.5.tar.gz
這是當(dāng)前的最新版本,可以到官網(wǎng)下載頁面查看最新版本或安裝以前的版本。
?
2.tar xzf redis-3.0.5.tar.gz 解壓后,cd redis-3.0.5 到Redis主目錄
?
3.make 編譯,注意可能會出現(xiàn)機(jī)器上缺少依賴包的提示,按提示安裝依賴包,直到make成功。
?
4.make test 運(yùn)行測試,一路顯示ok通過(需要安裝TCL依賴包,見提示)。
?
?
這時在src目錄下會多出幾個可執(zhí)行程序,其中redis-server是服務(wù)主程序。我們運(yùn)行redis-server --help看看有哪些參數(shù):
?
?
5. ./src/redis-server & 后臺啟動Redis,會顯示成功畫面,但會有三個警告提示。redis的提示很詳細(xì),我們照著做修改即可。
?
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
?
后兩個重啟生效。再次運(yùn)行redis-server命令,只存在一個沒有指定config文件使用缺省配置的警告。啟動畫面如下:
?
?
我們看到,服務(wù)已啟動,監(jiān)聽的端口號是6379
?
6. ./src/redis-cli 運(yùn)行提供的客戶端程序,體驗(yàn)下簡單操作命令。
?
?
redis所有支持命令在 http://redis.io/commands 上可以查到。
?
7. ./redis-cli shutdown 關(guān)閉redis服務(wù)。
?
8. make install 將redis命令安裝到bin目錄下,成為系統(tǒng)命令。
?
Redis配置參數(shù)
?
前面我們啟動redis,沒有指定配置文件,一般情況下,我們需要指定配置文件啟動。在redis主目錄下,有個redis.conf配置文件模板。cp redis.conf /etc 復(fù)制到etc目錄下。
?
redis.conf文件里的配置參數(shù)有詳細(xì)的解釋說明,下面是幾個常用參數(shù):
?
daemonize 缺省是no, 一般使用改為yes,這樣啟動redis-server時自動是后臺運(yùn)行方式。
?
port 6379 指定端口號,可以調(diào)整自己需要的端口值。
?
tcp-backlog 511 這個值就是前面需要調(diào)整somaxconn值的原因,它涉及到TCP連接時accept queue隊(duì)列的大小,是取它們的最小值。這個參數(shù)和redis高并發(fā)處理請求密切相關(guān),根據(jù)實(shí)際運(yùn)行情況調(diào)整。
?
bind 只接受來自某IP的請求,安全考慮,缺省不限制。
?
tcp-keepalive 60 主動檢測客戶端連接是否正常,官方建議是60s
?
loglevel notice 定義日志級別
logfile "" 定義日志文件位置
?
save 900 1 存儲數(shù)據(jù)到硬盤策略,這條定義的是900s內(nèi)如有1個key值發(fā)生變化,就執(zhí)行save存數(shù)據(jù)快照到硬盤操作。
?
dbfilename dump.rdb 指定數(shù)據(jù)快照文件名
dir ./ 指定數(shù)據(jù)快照文件目錄
?
調(diào)整好參數(shù)后,我們用redis-server /etc/redis.conf 命令啟動即可。
?
Java程序訪問Redis
?
Redis支持的客戶端操作語言非常豐富,達(dá)到40多種。就Java來說,也有很多訪問驅(qū)動實(shí)現(xiàn),我們最常用的還是Jedis。
?
Jedis源碼地址: https://github.com/xetorthio/jedis 活躍度很高,能夠跟上Redis服務(wù)端發(fā)布的最新功能,而且使用簡單,基本和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連接服務(wù)器相關(guān)參數(shù)。
?
<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運(yùn)行單元測試通過!
?
?
讀完本篇,你應(yīng)該了解如下內(nèi)容:
1.Redis是基于內(nèi)存的數(shù)據(jù)存儲系統(tǒng),數(shù)據(jù)以<key,value>形式存儲。value支持多種數(shù)據(jù)類型,包括String、Hash、List、Set、Sorted Set等。
?
2.Redis采用C語言開發(fā),安裝運(yùn)行在linux等POSIX系統(tǒng)上,windows系統(tǒng)上有第三方移植,可做開發(fā)測試。
?
3.Java常用的Redis客戶端編程驅(qū)動是Jedis。
?
本文摘自微信號:Java架構(gòu)師
?
轉(zhuǎn)載于:https://www.cnblogs.com/jelynn/p/5192236.html
總結(jié)
以上是生活随笔為你收集整理的20分钟快速了解Redis的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiveMq Windows 配置优
- 下一篇: mysql 关键词相关度排序方法详细示例