Jedis+Redis+spring緩衝

來源:互聯網
上載者:User

標籤:整合   imp   頻繁   resource   process   end   pool   org   iss   

Redis程式使用它?
Jedis 訪問redis java api

Redis-server & //後台運行
防火牆要關閉


ts-parent的pom.xml加上jedis依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>

編寫測試類別
package jedis;

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class TestJedis {
@Test
public void jedis(){
//串連redis伺服器,ip+port
String ip = "192.168.27.113";
//擷取到jedis對象
Jedis jedis = new Jedis(ip, 6379);
//調用redis set,key=name,value=tony
//jedis.set("name", "tony");
System.out.println(jedis.get("name"));
}
}

 

package jedis;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class TestJedis {
@Test
public void jedis(){
//串連redis伺服器,ip+port
String ip = "192.168.27.113";
//擷取到jedis對象
Jedis jedis = new Jedis(ip, 6379);
//調用redis set,key=name,value=tony
//jedis.set("name", "tony");
System.out.println(jedis.get("name"));
}

@Test//分區Shard池化
public void sharded(){
//建立一個Sharded池設定物件
JedisPoolConfig config = new JedisPoolConfig();
//最大的串連數
config.setMaxTotal(50);

//串連多個redis節點,ip和port的資訊
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
//一個的節點資訊就ok
JedisShardInfo info1 =
new JedisShardInfo("192.168.27.113",6379);
shards.add(info1);

//建立分區池
ShardedJedisPool pool =
new ShardedJedisPool(config, shards);

//從池中擷取一個jedis連結
ShardedJedis jedis = pool.getResource();
System.out.println(jedis.get("name"));
}
}


把jedis和spring架構整合
通過xml配置把jedis的對象建立交給spring架構。

在哪裡使用緩衝?
package cn.tedu.store.service;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import cn.tedu.store.bean.dict.Area;
import cn.tedu.store.bean.dict.City;
import cn.tedu.store.bean.dict.Province;
import cn.tedu.store.mapper.DictMapper;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

@Service("dictService")
public class DictServiceImpl implements DictService {

@Resource
private DictMapper dictMapper;
//擷取spring架構建立的jedis對象
@Resource
private ShardedJedisPool shardedJedisPool;
//轉換對象到json或者json到java對象工具類
private static final ObjectMapper MAPPER = new ObjectMapper();

public List<Province> getProvinceList() {
return dictMapper.getProvinceList();
}

public List<City> getCityList(String provinceCode){
List<City> cityList = null;
//設定redis key的規則
String KEY = "TS_CITY_"+provinceCode;

//由池中擷取jedis對象
ShardedJedis jedis = shardedJedisPool.getResource();

//1.從redis中擷取資料,如果有資料直接返回
//注意set設定2次就會被覆蓋
if(jedis.exists(KEY)){//判斷key是否存在
String json = jedis.get(KEY);
JsonNode jsonNode;
try {
//從緩衝中擷取資料,然後把json轉成java對象,然後直接返回,無需訪問資料庫
jsonNode = MAPPER.readTree(json);
Object obj = MAPPER.readValue(jsonNode.traverse(),
MAPPER.getTypeFactory().constructCollectionType(List.class, City.class));
return (List<City>) obj; //減輕資料庫訪問壓力
} catch (Exception e) {
e.printStackTrace();
}
}else{
//傳統方式直接從資料庫讀取資料
cityList = dictMapper.getCityList(provinceCode);

//2.第一訪問時redis沒有值,必須從資料庫中擷取值後,把值放入redis
//把java list集合轉成字串json
try {
String json = MAPPER.writeValueAsString(cityList);
jedis.set(KEY, json);
return cityList;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}

public List<Area> getAreaList(String cityCode) {
return dictMapper.getAreaList(cityCode);
}

public String getProvinceNameByCode(String provinceCode) {
return dictMapper.getProvinceNameByCode(provinceCode);
}

public String getCityNameByCode(String cityCode) {
return dictMapper.getCityNameByCode(cityCode);
}

public String getAreaNameByCode(String areaCode) {
return dictMapper.getAreaNameByCode(areaCode);
}

}

Redis緩衝應用注意點:
1、是不是所有的資料都能放在緩衝中?
Reids能否替代mysql
當然不是,
緩衝是存放熱點資料,不會頻繁修改的資料!!
記憶體掉電會有什麼問題?
資料丟失。Redis每秒鐘會自動存檔c++。MemCache

 

Jedis+Redis+spring緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.