一類數據多種存儲(慮將頻繁查詢的數據加載到內存或者內存數據庫。如果一類數據,即要在內存中存儲一份,又要在數據庫中存儲一)

一類數據多種存儲

      爲提升系統訪問性能,程序設計通常會考慮將頻繁查詢的數據加載到內存或者內存數據庫。如果一類數據,即要在內存中存儲一份,又要在數據庫中存儲一份。下面的代碼是獲取Article(文章)的實現。

    public Article getArticle(int articleId) {

        Article article = articleDaoMemcachedImpl.getArticle(articleId);

        if (article == null) {

            article = articleDaoMysqlImpl.getArticle(articleId);

            if (article != null) {

                articleDaoMemcachedImpl.addArticle(article);

            }

        }

        return article;

    }

    通過上述代碼我們可以看到,程序會先調用articleDaoMemcachedImpl.getArticle獲取,如果獲取不到,再調用articleDaoMysqlImpl.getArticle獲取,然後再調用articleDaoMemcachedImpl.addArticle寫入。上述articleDaoMemcachedImplMemcache實現,articleDaoMysqlImplmysql實現。

    這種實現,代碼臃腫且不易擴展。假設需要再增加一種實現的情況下,對代碼改動很大。使用XXX框架提供的Dao標準Api,可以很方便的實現擴展且代碼簡潔。

    public Article get(int articleId) {

        return CacheLoader.get(articleDaoMemcachedImpl, articleDaoMysqlImpl,

                    articleId);

    }

    簡單的一句調用,就完美實現了一類數據二類存儲,如果需要再增加一層存儲,只需要再增加一類實現傳入就可以了。

    XXXX Dao標準接口約定了當出現多種存儲時,需要定義DaoCacaheImpl實現。上述例子的代碼都是在DaoCacaheImpl裏實現的。前面的共識裏第三條也對此進行了說明。完整的文件結構如下:

    ArticleDao(接口), ArticleDaoCacheImplcache實現ArticleDao接口), ArticleDaoMemcachedImplmemcache實現ArticleDao接口), ArticleDaoMysqlImpl(mysql實現ArticleDao接口)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章