国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

spring redis入門

2019-11-14 23:30:46
字體:
來源:轉載
供稿:網友
sPRing redis入門

小二,上菜?。?!

1. 虛擬機上安裝redis服務

下載tar包,wget http://download.redis.io/releases/redis-2.8.19.tar.gz。

解壓縮,tar -zxvfredis-2.8.19.tar.gz

進到文件夾,cd redis-2.8.19/,編譯一下,make

創建空文件夾用于存放redis程序,mkdir /usr/local/redis

把編譯后的產物依次復制到redis文件夾下

1) 編譯后src文件夾下

紅色部分文件都分別復制過去

cp redis-benchmark /usr/local/redis

cp redis-cli /usr/local/redis

cp redis-server /usr/local/redis

2) 編譯后主文件夾下

cp redis.conf /usr/local/redis

乾坤大挪移施展好后,讓我們看看redis程序的文件夾是什么樣子的吧。

cd /usr/local/redis

OK,萬事俱備,只欠startup了,now 讓我們輕輕的輸入啟動命令:

./redis-server ./redis.conf

想在后臺運行?覺得命令太煩不爽?想設置成開機自啟動?那就nohup...&一下,把命令加入到path中,再把它寫入到rc.local里面吧。

自己百度吧,這里就不詳述了。

剛才我們是用默認的方式啟動服務器端的,默認的hostName是localhost,port是6379,你也可以編輯redis.conf改變他們。

好了,redis服務端啟動后讓我們使用客戶端連接下。輸入redis-cli 即可(默認是連接到localhost的6379端口)

這里keys *命令的意思是查看redis數據庫里目前有哪些內容。

我們可以簡單的輸入幾個redis命令來測試一下。

更多命令,敬請訪問,三達不溜點度娘點康姆。這里就不細說了。

注:第二部分java是在windows耍的,而要訪問linux主機上的redis,還需要“走后門”,你需要做的是在iptables配置里面添加6379為防火墻例外端口,并重啟一下iptables服務即可。

vi /etc/sysconf/iptables

加點佐料

service iptables restart

2. 訪問redis的java程序的編寫

這里我們就直接寫測試用例吧,直接用spring+junit就行了,做到簡潔大方就行,鋪張浪費可恥啊。

maven兄,出來耍耍吧。

項目的結構就是醬紫的。下面詳述一下各個文件里面的內容吧。

1) pom.xml

作為保姆maven的專屬區域,里面定義了要用到的包,要用到的是spring(包括core、context),junit,jedis和spring-data-redis。spring-data-redis是spring在jedis的基礎上再次進行了封裝,讓我們用起來更爽。

就直接上依賴包的代碼吧。

    <dependencies>        <!-- junit -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.11</version>        </dependency>        <dependency>            <groupId>redis.clients</groupId>            <artifactId>jedis</artifactId>            <version>2.1.0</version>        </dependency>        <!-- spring -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>3.1.2.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>3.1.2.RELEASE</version>        </dependency>        <!-- spring data redis -->        <dependency>            <groupId>org.springframework.data</groupId>            <artifactId>spring-data-redis</artifactId>            <version>1.1.1.RELEASE</version>        </dependency>    </dependencies>

不多說,保姆趕緊干活去。 (Maven童鞋:T_T 你這帶寬讓我很無語)

2) spring-redis.xml

spring的xml,里面當然是配置bean的嘍。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">    <context:property-placeholder location="classpath:redis.properties" />    <bean id="jedisConnectionFactory"        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">        <property name="hostName" value="${hostName}" />        <property name="port" value="${port}" />        <property name="database" value="${index}" />    </bean>    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">        <property name="connectionFactory" ref="jedisConnectionFactory" />    </bean></beans>

這里用到了一個小技巧,一些基礎的配置信息我可能不想要寫到xml里面,為毛呢,因為在linux下面用vi編輯格式會亂,有點小潔癖的我更愿意去編輯properties文件,key=value的形式更容易編輯,格式也不會紊亂。

那么?就用property placeholder吧,配置起來超簡單,要用某個key的時候只需要${key}這樣寫就可以了。

這里我們需要定義兩個spring-data-redis為我們封裝好的對象,一個是JedisConnectionFactory,是不是有點連接池之類的味道了,典型的工廠模式,從connection factory里面可以拿到redis的連接對象,然后用這個connection對象YY一下,然后可能LOL。。。;另外一個是StringRedisTemplate對象,又有點JdbcTemplate的味道了,典型的模板方法模式,通過這個template對象我們就可以進行CRUD了,只不過JdbcTemplate是針對關系型數據庫的,而這個RedisTemplate是針對redis非關系型數據庫的。

注意點:這里的redisTemplate我們不是用的基類RedisTemplate的對象(可能有些教程文章就用它,如果你的redis里已經有了字符串作為key/value的數據,那么小心出錯),而是其子類StringRedisTemplate。在redis里面進行CRUD時,用的最多的就是String,例如字符串作為key、作為value、作為hashmap的key或value,而基類RedisTemplate默認的序列化/反序列化操作(它使用的是JdkSerializationRedisSerializer類)不是針對字符串的,更確切的來說,RedisTemplate類里面的序列化/反序列化工具對字符串/字節數組進行處理后的結果不是我們想要的結果。子類StringRedisTemplate里面的序列化/反序列化工具是StringRedisSerializer類的實例,該類是我們想要的,因此這邊我們用了StringRedisTemplate的實例。有興趣的童鞋可以試一下,如果使用的是RedisTemplate類的實例,對redis進行寫操作的時候,寫入的會是什么樣的數據。

3) redis.properties

存放redis的配置信息。在第二點里也說了,具體的redis的服務器端配置信息,我們寫在這個文件里。

hostName=192.168.1.225port=6379index=0

就跟MySQL等數據庫一樣,一個redis服務上也能有多個數據庫,redis默認連接的是0號庫,默認有16個數據庫,這里的配置index是指幾號數據庫,范圍0~15,如果你想擴大容量,請自行修改redis.conf。

4) RedisTest.java

終于輪到豬腳登場了。咱們先看代碼吧。

package code.selwyn.spring.redis.demo.test;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.springframework.context.applicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;/** * Class RedisTest * 耍耍redis * * @author Selwyn * Date: Mar 28, 2015 7:15:57 PM */public class RedisTest {    /***     * spring配置文件     */    private final static String[] CONFIG_LOC = {        "spring-redis.xml"    };    private ApplicationContext appContext = null;    private ApplicationContext getAppContext()    {        return new ClassPathXmlApplicationContext(CONFIG_LOC);    }    @Before    public void setUp()    {        //讀取spring配置文件,載入到spring上下文        this.appContext = this.getAppContext();    }        /***     * 測試redis單值讀取與寫入     */    @Test    public void testRedisValueOperation()    {        RedisTemplate template = (RedisTemplate) this.appContext.getBean("redisTemplate");        //單值操作的對象,通過該對象直接可以對redis進行CRUD(單值操作)        ValueOperations<String, String> valueOper = template.opsForValue();                String key = "cat";        String valueExpected = "tom";                String value = valueOper.get(key);        Assert.assertNotNull(value);        Assert.assertEquals("The cat is not Tom!!!", valueExpected, value);        System.out.println(String.format("%s->%s",key,value));                String newValue = "hello kitty";        //設置新值        valueOper.set(key, newValue);        System.out.println("After changing...");        System.out.println(String.format("%s->%s",key,valueOper.get(key)));    }}

作為一個Test類,針對的是一個功能類的測試,里面會有多個測試用例,而每個測試用例都可能會在開始前進行配置,測試跑完后會進行收尾工作(比如斷開連接啊什么的),junit提供了兩個annotation給我們,一個是@Before,一個是@After。對于單個測試方法(以@Test標識),它的執行順序是@Before指定方法->@Test指定的方法->@After指定的方法。當然如果這個Test類里面的所有測試用例加載的配置都一樣,結束后又都進行相同的收尾操作,那么我們可以用另外兩個annotation,@BeforeClass和@AfterClass,我們現在就只有一個測試用例,就按常規來吧。

對于這個測試方法的前置工作,當然是讓spring幫我們蓋一間豪華別墅(context),生成兩個傭人(bean)。然后在測試代碼里面我們要做的就是指揮那個勤勞的傭人進行工作。一切都是那么的河蟹。

通過ClassPathXmlApplicationContext的構造方法,傳遞一個spring xml文件名數組給它,spring看到這個數組就開始初始化上下文,生成jedisConnectionFactory對象和redisTemplate對象,并且返回一個ApplicationContext對象,從這個對象里面我們可能很輕松的獲取那兩個生成的對象。

好,接下來看測試方法。

從spring上下文中獲取redisTemplate對象,獲取該對象的成員變量,即ValueOperations對象,這個類是個泛型類,ValueOperations<K, V>,對應redis數據庫的基礎數據類型String,即key為字符串,value也是字符串。

使用ValueOperations對象,可以進行redis對String類型的所有操作了,包括get,set,getex等操作,通過api就可以查到相關的接口方法。

例子里采用最基礎的get/set操作,相信大家也能看懂,就不多說了吧。

3. 總結

入門例子,相對還是太簡單了,深入學習還是需要掌握redis的很多基本命令,以及spring封裝后對應的又是哪些接口的哪些方法。作為一個碼農,面對新技術層出不窮、更新換代太快的情況,我只能說:任重而道遠,且摳(摳腚,coding)且哈皮。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄梅县| 项城市| 林周县| 阜南县| 临武县| 遵义县| 盐城市| 乐安县| 德格县| 湘西| 灵武市| 古丈县| 奎屯市| 突泉县| 内黄县| 宿松县| 盐城市| 丹棱县| 巴彦县| 易门县| 义乌市| 九龙城区| 水城县| 土默特右旗| 天等县| 九台市| 荥阳市| 金沙县| 德令哈市| 佳木斯市| 洛川县| 双流县| 松滋市| 潜山县| 江达县| 娱乐| 五峰| 嘉善县| 平远县| 合水县| 安国市|