Spring MVC 结合 Jedis Cluster
来源:互联网 发布:路由器突然没有网络 编辑:程序博客网 时间:2024/05/22 17:28
配置服务器端集群参考:Redis Cluster实践
实现代码
Maven
<!-- redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.6</version> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
配置host信息(master)
host.properties:
address1=127.0.0.1:7000 address2=127.0.0.1:7001 address3=127.0.0.1:7002
利用FactoryBean代理JedisCluster(FactoryBean理解).
public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean { private Resource addressConfig; private String addressKeyPrefix ; private JedisCluster jedisCluster; private Integer timeout; private Integer maxRedirections; private GenericObjectPoolConfig genericObjectPoolConfig; private Pattern pattern = Pattern.compile("^.+[:]\\d{1,5}\\s*$"); @Override public void afterPropertiesSet() throws Exception { Set<HostAndPort> haps = this.parseHostAndPort(); jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig); } @Override public JedisCluster getObject() throws Exception { return jedisCluster; } @Override public Class<? extends JedisCluster> getObjectType() { return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class); } @Override public boolean isSingleton() { return true; } private Set<HostAndPort> parseHostAndPort() throws Exception { try { Properties prop = new Properties(); prop.load(this.addressConfig.getInputStream()); Set<HostAndPort> haps = new HashSet<HostAndPort>(); for (Object key : prop.keySet()) { if (!((String) key).startsWith(addressKeyPrefix)) { continue; } String val = (String) prop.get(key); boolean isIpPort = pattern.matcher(val).matches(); if (!isIpPort) { throw new IllegalArgumentException("ip 或 port 不合法"); } String[] ipAndPort = val.split(":"); HostAndPort hap = new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1])); haps.add(hap); } return haps; } catch (IllegalArgumentException ex) { throw ex; } catch (Exception ex) { throw new Exception("解析 jedis 配置文件失败", ex); } } public void setAddressConfig(Resource addressConfig) { this.addressConfig = addressConfig; } public void setTimeout(int timeout) { this.timeout = timeout; } public void setMaxRedirections(int maxRedirections) { this.maxRedirections = maxRedirections; } public void setAddressKeyPrefix(String addressKeyPrefix) { this.addressKeyPrefix = addressKeyPrefix; } public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) { this.genericObjectPoolConfig = genericObjectPoolConfig; }}
Spring MVC 配置文件
<bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" > <property name="maxWaitMillis" value="-1" /> <property name="maxTotal" value="1000" /> <property name="minIdle" value="8" /> <property name="maxIdle" value="100" /></bean><bean id="jedisCluster" class="com.redis.cluster.JedisClusterFactory"> <property name="addressConfig"> <value>/WEB-INF/properties/host.properties</value> </property> <property name="addressKeyPrefix" value="address" /> <property name="timeout" value="300000" /> <property name="maxRedirections" value="6" /> <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" /></bean>
Redis Service
刷新最新的10条news, 如果缓存中存在,从缓存中读取,不存在,则从数据库中查询,并添加到缓存中(更新news省略)。
@Autowiredprivate JedisCluster jedisCluster ;public List<News> getTopNews() { Long number=jedisCluster.scard("TopNews"); List<News> newsset=new ArrayList<News>(); if(number==10) { Set<String> set=jedisCluster.smembers("TopNews"); for(String str : set) { newsset.add(JSON.parseObject(str, News.class)); //读取缓存的json字符串转换为对象 } } else { newsset=getNewsFromDb(); } return newsset; } public List<News> getNewsFromDb() { List<News> res=newsService.getLatestNews(); //newsService操作news数据库的服务,省略。 List<News> reslist=new ArrayList<News>(); for(String str : jedisCluster.smembers("TopNews")) { jedisCluster.srem("TopNews", str); } for(News news:res) { reslist.add(news); jedisCluster.sadd("TopNews", JSON.toJSONString(news)); //对象转换为json字符串,保存到缓存 } return reslist; }
0 0
- Spring MVC 结合 Jedis Cluster
- spring集成Jedis Cluster配置
- redis客户端jedis连接和spring结合
- jedis操作redis,结合spring,原生方法
- Spring MVC 结合Junit4
- Jedis cluster客户端使用
- Jedis cluster客户端使用
- 结合spring mvc发布webservice
- mongodb与spring mvc结合
- spring mvc、meven结合mybatis
- activeMQ+Spring-mvc结合使用
- spring 结合 redis 正确从jedisConnectionFactory获取Jedis实例
- redis cluster jedis client 示例
- spring+jedis
- Kissyui 结合spring mvc上传图片功能
- Spring MVC 结合jQuery实现AJAX
- RESTful架构---结合spring MVC 4
- json数据与spring mvc结合
- 结构体怎样使用extern?
- Java中equals和==的区别
- FRM-18108 FRM-10102错误解决
- Spring字符自动解释成Enum
- 小白日记12:kali渗透测试之服务扫描(二)-SMB扫描
- Spring MVC 结合 Jedis Cluster
- Android NDK so crash,定位目标代码使用 arm-linux-androideabi-addr2line
- 算法的排序过程
- json字符串转数组转对象
- ftp
- PUD编码规则
- 反转数字
- uIP学习的参考资料
- 安卓学习笔记---Android源码解析--Material Design之水波纹点击效果RippleEffect使用