Redis學習日誌【三、jedis+struts2】

上次熟悉了jedis的使用,接下來慢慢的將struts2,spring框架加上去,更加熟練使用。這次我們寫一個簡單的用redis實現的點贊功能。用redis實現點贊並非只是因爲點贊好做。而是點贊這種操作簡單,但是高併發嚴重的操作,如果是關係型數據庫。很容易導致數據庫奔潰,而這正好突出了nosql的優勢,由於是在緩存中操作,能高速且安全的操作。

首先,將redis持久化。具體方法請看redis學習日誌【二、redis+jedis】

所需的包

一、struts2的環境搭建

想必大家對struts2的環境搭建十分熟悉,再次我便不贅述了。
web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts Blank</display-name>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

struts.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.action.extension" value="action,do,,"/>

    <package name="default" namespace="/" extends="json-default">

      <action name="attentionAction_*" class="com.yc.web.actions.AttentionAction" method="{1}">
        <result name="success" type="json">
                <param name="root">
                    jsonModel
                </param>
            </result>
      </action>
    </package>

</struts>

界面js(我使用的是ajax局部刷新方案)

<script type="text/javascript">
    $(function(){    //界面加載完成後查詢redis中贊和踩的數據,修改界面上的
        $.ajax({
            type:"POST",
            url:"attentionAction_findInfo",
            dataType:'JSON',
            success: function(data){
                if(data.code==1){
                    $("#numcai").html(data.obj.cai);
                    $("#numzan").html(data.obj.zan);
                }else{
                    alert(data);
                }
            }

        });
    });

    function doAny(doWhat){     //贊或踩,具體執行的方法根據傳入的對象的id確定

        var method=$(doWhat).attr("id");
        alert(method);
        $.ajax({
            type:"POST",
            url:"attentionAction_"+method,
            dataType:'JSON',
            success: function(data){
                if(data.code==1){
                    alert(data.obj);
                    $("#numcai").html(data.obj);
                }else if(data.code==0){
                    alert(data.obj);
                    $("#numzan").html(data.obj);
                }else{
                    alert(data);
                }
            }

        });
    }
</script>

html(這裏因爲是ajax方案,所以不使用submit而是button且方法名不能叫submit()被坑得都醉了T.T)

<body>
    <form id="myform" name="myform" method="post">
        <input type="button" id="zan" name="zan" onclick="doAny(this)"  value="贊"/><a id="numzan">0</a>人贊
        <input type="button" id="cai" name="cai" onclick="doAny(this)"  value="踩"/><a id="numcai">0</a>人踩
    </form>
</body>

AttentionAction.java

package com.yc.web.actions;

import java.util.HashMap;
import java.util.Map;

import com.yc.bean.JsonModel;
import com.yc.biz.AttentionBiz;
import com.yc.biz.impl.AttentionBizImpl;

public class AttentionAction {
    private JsonModel jsonModel; 
    private AttentionBiz attentionBiz;
    //點贊
    public String zan(){    
        attentionBiz=new AttentionBizImpl();
        int zannum=attentionBiz.zan();
        jsonModel=new JsonModel();
        jsonModel.setCode(0);
        jsonModel.setObj(zannum);
        return "success";
    }
    //踩
    public String cai(){
        attentionBiz=new AttentionBizImpl();
        int cainum=attentionBiz.cai();
        jsonModel=new JsonModel();
        jsonModel.setCode(1);
        jsonModel.setObj(cainum);
        return "success";
    }
    //查詢贊和踩的信息
    public String findInfo(){
        Map<String,Integer> map=new HashMap<String,Integer>();
        attentionBiz=new AttentionBizImpl();
        map=attentionBiz.findInfo();
        jsonModel=new JsonModel();
        jsonModel.setCode(1);
        jsonModel.setObj(map);
        return "success";
    }

    public JsonModel getJsonModel() {
        return jsonModel;
    }
    public void setJsonModel(JsonModel jsonModel) {
        this.jsonModel = jsonModel;
    }
}

AttentionDaoImpl

public class AttentionDaoImpl implements AttentionDao {
    private static final String ZAN="zan";
    private static final String CAI="cai";
    private RedisUtil redisUtil=new RedisUtil();
    @Override
    public int zan() {
        Jedis jedis=redisUtil.getJedis();   //getJedis可以去到一個已持久化的jedis
        int numzan=0;
        if(jedis.get(ZAN)==null){   //
            jedis.set(ZAN, "1");  //如果redis中沒有zan的數據,創建(容錯)
        }else{
            jedis.incr(ZAN);   //incr()方法會自增該數據的value
        }
        numzan=Integer.parseInt(jedis.get(ZAN));  //get方法得到的是String型,需類型轉換。
        return numzan;
    }
    @Override
    public int cai() {
        Jedis jedis=redisUtil.getJedis();  //getJedis可以去到一個已持久化的jedis
        int numzan=0;
        if(jedis.get(CAI)==null){
            jedis.set(CAI, "1");
        }else{
            jedis.incr(CAI);
        }
        numzan=Integer.parseInt(jedis.get(CAI));
        return numzan;
    }
    @Override
    public Map<String, Integer> findInfo() {
        Jedis jedis=redisUtil.getJedis();  //getJedis可以去到一個已持久化的jedis
        Map<String, Integer> map=new HashMap<String,Integer>();
        map.put(ZAN,Integer.parseInt(jedis.get(ZAN)));
        map.put(CAI,Integer.parseInt(jedis.get(CAI)));
        return map;
    }

}

如此簡單地struts+jedis的一個小案例就完成了。由這個項目也能看出來jedis真的十分方便。如果是關係型數據庫,還得連接數據庫,寫sql語句,還得等他跑。我測試過redis點贊與關係型數據庫點讚的操作速度對比,快得還是蠻明顯的。

學習redis我也只是自己專研,我很希望有人能與我討論,不好的地方也請各路大神幫忙指出,謝謝。

發佈了24 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章