nosql,大規模分佈式緩存遍天下。Internet的時代在中國由其走得前沿,這一切歸功於我國特點的電商。html
所以nosql、大數據技術在中國應用的比國外還要前沿。java
從這一章開始咱們將開始進入到真正的SOA、PAAS、SAAS、互聯網的領域,所以每一篇我都會添加一小段業務的基礎知識,讓你們在學習技術的同一時候也可以瞭解一些業務,這邊的業務不是指的business logic不是讓你們去作業務人員,而是爲你們帶來IDEA,」沒有作不到僅僅有想不到「,阿里支付寶爲何發了。。。不是技術,而是它的IDEA。mysql
14年1月時在上海參加過一個MagentoCom召集的電商峯會。會上一羣LAO WAI在那邊大談本身的電商經驗,有LV。有ADIDAS,bla...bla...bla...聽着聽着,真是認爲可笑。歇息時隨便問一個LAO WAI一個問題:linux
」大家知道什麼叫一元秒殺嗎?「git
」大家知道什麼7天無理由退貨嗎?「github
」大家知道什麼叫0體驗嗎?「web
」大家有沒有雙11,雙12。有沒有交易量過億。redis
。spring
。「sql
LAO WAI 」張嘴,流哈喇子,billions of transaction? billions「
看着他這個樣子。我是硬忍住後來到WC一邊抽菸一邊笑,笑得連手上的菸頭都抖了,唉。
。。。。。
不是說國外的電商不這麼幹,而是經濟體制決定了電商的發展道路不一樣,因爲國外的電商是基於他們的」信任「式經濟的模式下的,所以國外的電商基本都是信用卡、預先衝款、預售卡、充值卡這些,這也決定了國外沒有什麼1元秒殺。
。
。這些哄人氣的東東。
另一點就是國外人口也少。呵呵,這算是一個理由。
還有就是國外基本無」不是名牌「這一說。記得去法國onsite交流學習時。假設你穿的一件ADIDAS或者是NIKE或者是阿瑪尼假設不是正宗名牌,是仿的話也會被警察抓住罰款,所以國外是個商品基本都有牌子。這是一種」互信「機制。
中國的電商儘管也是走線上、線下可是它多了一個」第三方資金託付「即支付寶、易寶、微信(微信是後起之秀)這種東東。所以這種體制決定了」先驗貨,後付錢「的這種遊戲規則。
加上中國人多,這下大數據、NOSQL、分佈式這些技術固然成爲了通向internet的重中之重了。
Redis是一個NOSQL,NOSQL有不少種。它們分爲:
光知道這些NOSQL的名詞是沒實用的。關鍵在於要知道在哪一種場景下選用哪一種NOSQL纔是咱們真正要去掌握的。
咱們這邊說Redis就拿Redis說事吧,它能幹什麼呢?
因爲Redis爲GCC+這種東西開發出來的,它天生就是執行在LINUX/Unix環境下的。而那個windows版的Redis是一個」煙「割版。並且是一個unofficial的版本號,非官方受權的哈。
docker@boot2docker:~$ docker run hello-world
Hello from Docker. This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the 「hello-world」 image from the Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash For more examples and ideas, visit: http://docs.docker.com/userguide/
cat ubuntu-14.04-x86_64.tar.gz |docker import - ubuntu:ubuntu14
這個過程會很是快,完畢後查看本身的image:
成功導入了ubuntu,這樣咱們就可以在docker中執行出一個本身的ubuntu了。
docker run -i -t ubuntu:ubuntu14 /bin/bash
以上執行後,進入了該ubuntu的bash環境。
注:假設上述命令出錯。可以使用如下這條命令:
docker run -i -t ubuntu:ubuntu14 //bin/bash
兩個 「/」 哈
假設你能看到類似於root@ubuntu14_這種命令行界面說明你的ubuntu14也已經成功安裝了。如下咱們就要在這個docker->ubuntu14中安裝和佈署咱們的Redis了,這個過程和在linux下同樣。
在ubuntu14下先安裝SSHD。以便於咱們使用WINSCP這種SFTP工具來管理咱們的ubuntu14中的文件系統
docker run -t -i ubuntu/mk:v1 /bin/bash
第二步:
升級一下你的apt-get,它就是一個命令行IE下載工具,假設你不update,那麼你apt-get的源、內核都爲舊的,所以爲了升級apt-get請鍵入如下的命令
apt-get update
第三步:
下載和安裝openssh組件
apt-get install openssh-server openssh-client
改動你的rootpassword
passwd
第五步:
退出容器,並保存以上改動,假設docker在退出後你接着退出docker環境或者是關機那麼剛纔的4步所有不生效,你必定要commit它才幹生效,爲此:
docker ps -a來查到你latest的一次容器的ID,它是一組16進制同樣的編碼如:1edfb9aabde8890,有了這個container id咱們就可以commit咱們剛纔裝的openssh的環境了
docker commit 1edfb9aabde8890 ubuntu:ssh
執行帶有openssh的ubuntu14以便於咱們使用winscp這種SFTP工具連入咱們的ubuntu14中去。依次輸入如下的命令:
docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
Docker是這種機制的,它可以開啓多個容器,每個容器帶着一堆的image(鏡像)。要刪一個鏡像必須先中止這個鏡像所在的容器,再把這個鏡像刪除,所以咱們使用上面這兩條命令對於Docker來一個大掃除。
接着咱們先查一下咱們眼下手頭有的鏡像
docker images你會看到一個images列表。裏面有咱們的ubuntu:14,有咱們的ubuntu:ssh也有一個hello-world,咱們把ubuntu:14這個鏡像刪了吧(爲了保持乾淨哈)
每個image也它本身的id。即image id,所以你用docker images命令查到該鏡像的id後可以使用:
docker rmi imageid這條命令把一個不用的鏡像給刪了。
接下去咱們要啓動咱們的ubuntu14:ssh了,可以使用如下這條命令:
docker -d -p 122:22 ubuntu:ssh //usr/sbin/sshd -D
咱們知道docker安裝後它會利用virtualbox中的vhost only的nat機制來創建一個虛擬的IP
網上很是多在ubuntu14下安裝redis的教程都不正確的,你們看了要上當的。緣由在於例如如下,請各位看完:
不復合咱們的站點擴容、增量、運維和麪對巨大用戶(萬級併發-最高支持百萬用戶如:新浪微博、微信)的場景
就是用的這個redis-stable.tar.gz包。這是我在寫博客時眼下最新最穩定版本號,修復了大量的BUG和無缺了功能。
第二步:
下載後咱們把該包上傳到咱們的docker中的ubuntu14中,咱們把它放在/opt文件夾下
而後咱們使用tar -zxvf redis-stable.tar.gz對它進行解壓
解壓後它就會生成一個redis-stable文件夾。進入該文件夾 cd redis-stable
別急,咱們先一會編譯和安裝它
第三步:編譯安裝redis
咱們先輸入gcc -v 這個命令來查看咱們的gcc版本號,假設它低於4.2如下那麼你在編譯redis3.0.7時必定會碰到大量的出錯信息,如前面所述。redis爲gcc寫成,最新的redis需要gcc4.2-5這個版本號才幹進行編譯,而通常去年或者以前裝的linux/unix 的 gcc都爲4.0如下或者甚至是3.x版。
升級GCC先
apt-get install build-essential
升級後咱們開始編譯redis3.0.7了,爲此咱們需要在redis-stable文件夾下
鍵入例如如下命令:
make PREFIX=/usr/local/redis1 install
咱們告知咱們的GCC把redis-stable編譯並同一時候安裝在/usr/local/redis1文件夾下
這個過程很是快。可能僅僅有10秒鐘時間(根據你的機器來講,建議使用>=8gb, 4核CPU的PC機),而後咱們就可以看到everything ok了。
咱們進入/usr/local/redis1就可以看到咱們剛纔安裝的redis3.0.7穩定版了。
咱們進入咱們的redis文件夾 cd /usr/local/redis1/bin
在此文件夾下咱們即可以執行咱們的redis server了,只是請別急。在啓動前咱們需要對redis進行一些配置。
個人博客面對的是「全棧式」project師的,架構師僅僅是成爲全棧式project師中的一個起點。假設你不會搭環境那麼你就不能接觸到最新的技術,所以這就是不少程序猿工做了近5年。7年結果發覺也僅僅會一個SSH的主要緣由。
daemonize yes # When running daemonized, Redis writes a pid file in /var/run/redis.pid by # default. You can specify a custom pid file location here. pidfile "/var/run/redis/redis1.pid" # Accept connections on the specified port, default is 6379. # If port 0 is specified Redis will not listen on a TCP socket. port 7001咱們把:
。。
這樣來延續。
那麼很是多同協這時要問了。「爲何咱們不把它命名成master, slave1, slave2這種名字呢?」。理由很是easy,無論是現在的hadoop仍是zookeeper它們的集羣是跨機房的。多個master間也有MASTER-SLAVE模式互爲備份。因爲一些大型站點不只僅僅僅有一個IDC機房,它們通常都會有2個,3個IDC機房,或者是在同一個IDC機房中有「跨機櫃」的佈署來造成超大規模集羣,就和ALI的TAOBAO網同樣,它在北美都有機房,所以當你需要在LOCAL NATIVE建一個IDC機房。在北美再作一個機房,你不要想把一個MASTER設在中國。SLAVE設到美國去,而是多地甚至是多機櫃都有MASTER。一旦一個MASTER宕機了,這種集羣會經過一個叫「選舉策略」選出一個節點把這個節點做爲當前「羣」的MASTER,所以咱們的命名纔會是redis1, redis2, redis3...這樣來命名的。
save 900 1 save 300 10 save 60 10000中的300 10 和60 10000凝視掉。這邊表明的是:
。。別急。這個問題咱們後面會解答,這涉及到redis的「正確」使用,假設它僅僅是一個緩存。我相信5分鐘內緩存的丟失此時程序直接訪問數據庫也不會有太大問題。又要保證數據完整性又要保證性能這自己是一個矛與盾的問題,除非你錢多了燒那我會給出你一個燒錢的配置策略,連新浪都不會這麼燒錢。呵呵。
RDB 很是適用於災難恢復(disaster recovery):它僅僅有一個文件,並且內容都很是緊湊。可以(在加密後)將它傳送到別的數據中心如阿里的mysql異地機房間使用FTP傳binlog的作法。
默認超過原大小100%大小時重寫。這邊可以設定一個適當的數值。
。。。。
docker -d -p 122:22 -p 7001:7001 redis:basic //usr/sbin/sshd -D
好了,用putty連入這個image的進程並啓動redis服務。而後咱們拿windows中的redis-cli命令來連。
假設在linux環境下仍是沒有連通(可能的哦),那是因爲你沒有禁用linux下的防火牆。咱們可以使用iptables -F來禁用linux的防火牆或者使用:
vi /etc/selinux/config
而後把
SELINUX=enforcing 這句用」#「凝視掉
添加一句: SELINUX=disabled #添加
這樣每次啓動後linux都不會有iptables的困擾了(這是在本機環境下這麼幹哦,假設你是生產環境請自行加iptables策略以贊成redis服務端口可以被訪問)。
看到如下這個PONG即表明你的redis服務已經在網絡環境中起效了。
如下咱們要開始使用JAVA客戶端來連咱們的Redis Service了。
在此咱們需要使用spring data和jedis,如下給出相關的maven配置
<dependencies> <!-- poi start --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi_version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>${poi_version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>${poi_version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${poi_version}</version> </dependency> <!-- poi end --> <!-- active mq start --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.8.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>${activemq_version}</version> </dependency> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>3.16</version> </dependency> <!-- active mq end --> <!-- servlet start --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${javax.servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- servlet end --> <!-- redis start --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>1.0.2</version> </dependency> <!-- redis end --> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- spring conf start --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> <version>${spring.session.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- spring conf end --> </dependencies>
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder location="classpath:/spring/redis.properties" /> <context:component-scan base-package="org.sky.redis"> </context:component-scan> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host.ip}" /> <property name="port" value="${redis.host.port}" /> <property name="poolConfig" ref="jedisPoolConfig" /> </bean> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.maxTotal}" /> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="maxWaitMillis" value="${redis.maxWait}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> <property name="testOnReturn" value="${redis.testOnReturn}" /> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> </bean> <!--將session放入redis --> <bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"> <property name="maxInactiveIntervalInSeconds" value="1800" /> </bean> <bean id="customExceptionHandler" class="sample.MyHandlerExceptionResolver" /> </beans>
redis.host.ip=192.168.0.101 redis.host.port=6379 redis.maxTotal=1000 redis.maxIdle=100 redis.maxWait=2000 redis.testOnBorrow=false redis.testOnReturn=true
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- - Location of the XML file that defines the root application context - Applied by ContextLoaderListener. --> <!-- tag::context-param[] --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:/spring/redis-conf.xml </param-value> </context-param> <!-- end::context-param[] --> <!-- tag::springSessionRepositoryFilter[] --> <filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <!-- end::springSessionRepositoryFilter[] --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- - Loads the root application context of this web app at startup. - The application context is then available via - WebApplicationContextUtils.getWebApplicationContext(servletContext). --> <!-- tag::listeners[] --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- end::listeners[] --> <servlet> <servlet-name>sessionServlet</servlet-name> <servlet-class>sample.SessionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessionServlet</servlet-name> <url-pattern>/servlet/session</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
這邊主要是一個:
<filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <session-config> <session-timeout>30</session-timeout> </session-config>這個filter必定要寫在一切filter以前
package sample; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * Created by mk on 15/1/7. */ @Controller @EnableRedisHttpSession public class SessionController { @RequestMapping("/mySession") public String index(final Model model, final HttpServletRequest request) { if (request.getSession().getAttribute("testSession") == null) { System.out.println("session is null"); request.getSession().setAttribute("testSession", "yeah"); } else { System.out.println("not null"); } return "showSession"; } }
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>showSession</title> </head> <body> <% String sessionValue=(String)session.getAttribute("testSession"); %> <h1>Session Value From Servlet is: <%=sessionValue%></h1> </body> </html>
保證咱們的redise-server是啓動的。而後咱們啓動起這個webproject後使用:
http://localhost:8080/webpoc/mySession訪問一下這個controller
此時咱們使用redis客戶端工具連入查看spring session是否已經進入到了redis中去。
在redis客戶端工具連入後咱們可以在redis console中使用keys *來查看存入的key。LOOK,spring的session存入了redis中去了。
再來看咱們的eclipse後臺,因爲咱們是第一次訪問這個controller。所以這個session爲空。所以它顯演示樣例如如下:
咱們在IE中再次訪問該controller
因爲以前的session已經存在於redis了,所以當用戶在1800秒(30分鐘)內再次訪問controller。它會從session中獲取該session的key testSession的值,所以eclipse後臺打印爲not null。
講過了spring session+redis咱們來說使用spring data框架提供的redisTemplate來訪問redis service吧。說實話。spring這個東西真強,什麼都可以集成,cassandra, jms, jdbc...jpa...bla...bla...bla...Spring集成Barack Hussein Obama? LOL :)
不用列了。上面有了
不用列了,上面有了
也不用列了,上面也有了
package sample; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisSentinelPool; import util.CountCreater; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * Created by xin on 15/1/7. */ @Controller public class SentinelController { @Autowired private StringRedisTemplate redisTemplate; @RequestMapping("/sentinelTest") public String sentinelTest(final Model model, final HttpServletRequest request, final String action) { return "sentinelTest"; } @ExceptionHandler(value = { java.lang.Exception.class }) @RequestMapping("/setValueToRedis") public String setValueToRedis(final Model model, final HttpServletRequest request, final String action) throws Exception { CountCreater.setCount(); String key = String.valueOf(CountCreater.getCount()); Map mapValue = new HashMap(); for (int i = 0; i < 1000; i++) { mapValue.put(String.valueOf(i), String.valueOf(i)); } try { BoundHashOperations<String, String, String> boundHashOperations = redisTemplate .boundHashOps(key); boundHashOperations.putAll(mapValue); System.out.println("put key into redis"); } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } return "sentinelTest"; } }
觀察咱們的後臺
而後使用redis client連入後進行查看
看。。。這個值key=1的,就是咱們經過spring的redisTemplate存入進去的值,即便用如下這段代碼進行存入的值:
for (int i = 0; i < 1000; i++) { mapValue.put(String.valueOf(i), String.valueOf(i)); } try { BoundHashOperations<String, String, String> boundHashOperations = redisTemplate.boundHashOps(key); boundHashOperations.putAll(mapValue);
redisTemplate.execute(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set( redisTemplate.getStringSerializer().serialize( "test"), redisTemplate .getStringSerializer() .serialize("hello")); return null; } });是否是很是方便的哈?結束第一天的教程,明天開始搭建redis集羣。