diff --git a/README.md b/README.md index 91630b3..f22ff71 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ spring-cloud:Finchley.SR2 | [spring-jdbc](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-jdbc)
[spring-jdbc-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-jdbc-annotation) | spring jdbc-template 的使用 | [Using JdbcTemplat](https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/data-access.html#jdbc-JdbcTemplate) | | [spring-mybatis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-mybatis)
[spring-mybatis-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-mybatis-annotation) | spring 整合 mybatis | [mybatis-spring中文文档](http://www.mybatis.org/spring/zh/index.html) | | [spring-druid-mybatis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-druid-mybatis)
[spring-druid-mybatis-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-druid-mybatis-annotation) | spring 整合druid、mybatis | [alibaba druid](https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) | -| spring-redis
spring-redis-annotation | spring 整合 redis | | -| spring-mongodb
spring-mongodb-annotation | spring 整合 mongodb | | +| spring-redis
spring-redis-annotation | spring 整合 redis | [redisson中文文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | +| spring-mongodb
spring-mongodb-annotation | spring 整合 mongodb | [Xmemcached中文文档](https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97) | | spring-memcached
spring-memcached-annotation | spring 整合 memcached | | | spring-rabbitmq
spring-rabbitmq-annotation | spring 整合 rabbitmq | | | spring-kafka
spring-kafka-annotation | spring 整合 kafka | | diff --git a/spring/spring-memcached-annotation/pom.xml b/spring/spring-memcached-annotation/pom.xml new file mode 100644 index 0000000..42118b5 --- /dev/null +++ b/spring/spring-memcached-annotation/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.heibaiying + spring-memcached-annotation + 1.0-SNAPSHOT + + 5.1.3.RELEASE + + + + + org.springframework + spring-context + ${spring-base-version} + + + org.springframework + spring-beans + ${spring-base-version} + + + org.springframework + spring-core + ${spring-base-version} + + + org.springframework + spring-web + ${spring-base-version} + + + org.springframework + spring-webmvc + ${spring-base-version} + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.projectlombok + lombok + 1.18.4 + provided + + + + junit + junit + 4.12 + test + + + org.springframework + spring-test + ${spring-base-version} + test + + + org.projectlombok + lombok + 1.18.4 + provided + + + + com.googlecode.xmemcached + xmemcached + 2.4.5 + + + + \ No newline at end of file diff --git a/spring/spring-memcached-annotation/src/main/java/com/heibaiying/bean/Programmer.java b/spring/spring-memcached-annotation/src/main/java/com/heibaiying/bean/Programmer.java new file mode 100644 index 0000000..3cc23e4 --- /dev/null +++ b/spring/spring-memcached-annotation/src/main/java/com/heibaiying/bean/Programmer.java @@ -0,0 +1,26 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author : heibaiying + * @description : + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Programmer implements Serializable { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/spring/spring-memcached-annotation/src/main/java/com/heibaiying/config/MemcacheConfig.java b/spring/spring-memcached-annotation/src/main/java/com/heibaiying/config/MemcacheConfig.java new file mode 100644 index 0000000..00b6fd0 --- /dev/null +++ b/spring/spring-memcached-annotation/src/main/java/com/heibaiying/config/MemcacheConfig.java @@ -0,0 +1,67 @@ +package com.heibaiying.config; + +import net.rubyeye.xmemcached.MemcachedClient; +import net.rubyeye.xmemcached.XMemcachedClientBuilder; +import net.rubyeye.xmemcached.command.TextCommandFactory; +import net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator; +import net.rubyeye.xmemcached.transcoders.SerializingTranscoder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : heibaiying + */ +@Configuration +public class MemcacheConfig { + + /* + * Memcached 单机版本简单配置 + */ + @Bean + public MemcachedClient memcachedClient() { + XMemcachedClientBuilder builder = new XMemcachedClientBuilder("192.168.200.201:11211"); + MemcachedClient memcachedClient = null; + try { + memcachedClient = builder.build(); + } catch (IOException e) { + e.printStackTrace(); + } + return memcachedClient; + } + + /* + * Memcached 集群版本配置 + */ + @Bean + public MemcachedClient memcachedClientForCluster() { + + List addressList = new ArrayList(); + addressList.add(new InetSocketAddress("192.168.200.201", 11211)); + addressList.add(new InetSocketAddress("192.168.200.201", 11212)); + // 赋予权重 + int[] weights = {1, 2}; + XMemcachedClientBuilder builder = new XMemcachedClientBuilder(addressList, weights); + // 设置连接池大小 + builder.setConnectionPoolSize(10); + // 协议工厂 + builder.setCommandFactory(new TextCommandFactory()); + // 分布策略,一致性哈希KetamaMemcachedSessionLocator或者ArraySessionLocator(默认) + builder.setSessionLocator(new KetamaMemcachedSessionLocator()); + // 设置序列化器 + builder.setTranscoder(new SerializingTranscoder()); + MemcachedClient memcachedClient = null; + try { + memcachedClient = builder.build(); + } catch (IOException e) { + e.printStackTrace(); + } + return memcachedClient; + } + + +} \ No newline at end of file diff --git a/spring/spring-memcached-annotation/src/test/java/memcached/MemObjectSamples.java b/spring/spring-memcached-annotation/src/test/java/memcached/MemObjectSamples.java new file mode 100644 index 0000000..be54e51 --- /dev/null +++ b/spring/spring-memcached-annotation/src/test/java/memcached/MemObjectSamples.java @@ -0,0 +1,37 @@ +package memcached; + +import com.heibaiying.bean.Programmer; +import com.heibaiying.config.MemcacheConfig; +import net.rubyeye.xmemcached.MemcachedClient; +import net.rubyeye.xmemcached.exception.MemcachedException; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Date; +import java.util.concurrent.TimeoutException; + +/** + * @author : heibaiying + * @description :Memcached 序列化与反序列化 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = {MemcacheConfig.class}) +public class MemObjectSamples { + + @Autowired + private MemcachedClient memcachedClient; + + @Test + public void operate() throws InterruptedException, MemcachedException, TimeoutException { + memcachedClient.set("programmer", 0, new Programmer("xiaoming", 12, 5000.21f, new Date())); + Programmer programmer = memcachedClient.get("programmer"); + System.out.println("hello ," + programmer.getName()); + memcachedClient.delete("programmer"); + programmer = memcachedClient.get("programmer"); + Assert.assertNull(programmer); + } +} diff --git a/spring/spring-memcached-annotation/src/test/java/memcached/MemSamples.java b/spring/spring-memcached-annotation/src/test/java/memcached/MemSamples.java new file mode 100644 index 0000000..691c916 --- /dev/null +++ b/spring/spring-memcached-annotation/src/test/java/memcached/MemSamples.java @@ -0,0 +1,34 @@ +package memcached; + +import com.heibaiying.config.MemcacheConfig; +import net.rubyeye.xmemcached.MemcachedClient; +import net.rubyeye.xmemcached.exception.MemcachedException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.concurrent.TimeoutException; + +/** + * @author : heibaiying + * @description : Memcached 操作基本对象 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = {MemcacheConfig.class}) +public class MemSamples { + + @Autowired + private MemcachedClient memcachedClient; + + @Test + public void operate() throws InterruptedException, MemcachedException, TimeoutException { + memcachedClient.set("hello", 0, "Hello,cluster xmemcached"); + String value = memcachedClient.get("hello"); + System.out.println("hello=" + value); + memcachedClient.delete("hello"); + value = memcachedClient.get("hello"); + System.out.println("hello=" + value); + } +} diff --git a/spring/spring-memcached/pom.xml b/spring/spring-memcached/pom.xml new file mode 100644 index 0000000..14dcba4 --- /dev/null +++ b/spring/spring-memcached/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.heibaiying + spring-memcached + 1.0-SNAPSHOT + + 5.1.3.RELEASE + + + + + org.springframework + spring-context + ${spring-base-version} + + + org.springframework + spring-beans + ${spring-base-version} + + + org.springframework + spring-core + ${spring-base-version} + + + org.springframework + spring-web + ${spring-base-version} + + + org.springframework + spring-webmvc + ${spring-base-version} + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.projectlombok + lombok + 1.18.4 + provided + + + + junit + junit + 4.12 + test + + + org.springframework + spring-test + ${spring-base-version} + test + + + org.projectlombok + lombok + 1.18.4 + provided + + + + com.googlecode.xmemcached + xmemcached + 2.4.5 + + + + \ No newline at end of file diff --git a/spring/spring-memcached/src/main/java/com/heibaiying/bean/Programmer.java b/spring/spring-memcached/src/main/java/com/heibaiying/bean/Programmer.java new file mode 100644 index 0000000..3cc23e4 --- /dev/null +++ b/spring/spring-memcached/src/main/java/com/heibaiying/bean/Programmer.java @@ -0,0 +1,26 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author : heibaiying + * @description : + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Programmer implements Serializable { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/spring/spring-memcached/src/main/resources/memcached/clusterConfig.xml b/spring/spring-memcached/src/main/resources/memcached/clusterConfig.xml new file mode 100644 index 0000000..5a29ad3 --- /dev/null +++ b/spring/spring-memcached/src/main/resources/memcached/clusterConfig.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + 1 + 2 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-memcached/src/main/resources/memcached/singleConfig.xml b/spring/spring-memcached/src/main/resources/memcached/singleConfig.xml new file mode 100644 index 0000000..854709f --- /dev/null +++ b/spring/spring-memcached/src/main/resources/memcached/singleConfig.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-memcached/src/main/resources/springApplication.xml b/spring/spring-memcached/src/main/resources/springApplication.xml new file mode 100644 index 0000000..9759cca --- /dev/null +++ b/spring/spring-memcached/src/main/resources/springApplication.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-memcached/src/test/java/com/heibaiying/memcached/MemObjectSamples.java b/spring/spring-memcached/src/test/java/com/heibaiying/memcached/MemObjectSamples.java new file mode 100644 index 0000000..5f6e033 --- /dev/null +++ b/spring/spring-memcached/src/test/java/com/heibaiying/memcached/MemObjectSamples.java @@ -0,0 +1,36 @@ +package com.heibaiying.memcached; + +import com.heibaiying.bean.Programmer; +import net.rubyeye.xmemcached.MemcachedClient; +import net.rubyeye.xmemcached.exception.MemcachedException; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Date; +import java.util.concurrent.TimeoutException; + +/** + * @author : heibaiying + * @description :Memcached 序列化与反序列化 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration({"classpath:springApplication.xml"}) +public class MemObjectSamples { + + @Autowired + private MemcachedClient memcachedClient; + + @Test + public void operate() throws InterruptedException, MemcachedException, TimeoutException { + memcachedClient.set("programmer", 0, new Programmer("xiaoming", 12, 5000.21f, new Date())); + Programmer programmer = memcachedClient.get("programmer"); + System.out.println("hello ," + programmer.getName()); + memcachedClient.delete("programmer"); + programmer = memcachedClient.get("programmer"); + Assert.assertNull(programmer); + } +} diff --git a/spring/spring-memcached/src/test/java/com/heibaiying/memcached/MemSamples.java b/spring/spring-memcached/src/test/java/com/heibaiying/memcached/MemSamples.java new file mode 100644 index 0000000..6a26236 --- /dev/null +++ b/spring/spring-memcached/src/test/java/com/heibaiying/memcached/MemSamples.java @@ -0,0 +1,33 @@ +package com.heibaiying.memcached; + +import net.rubyeye.xmemcached.MemcachedClient; +import net.rubyeye.xmemcached.exception.MemcachedException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.concurrent.TimeoutException; + +/** + * @author : heibaiying + * @description : Memcached 操作基本对象 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration({"classpath:springApplication.xml"}) +public class MemSamples { + + @Autowired + private MemcachedClient memcachedClient; + + @Test + public void operate() throws InterruptedException, MemcachedException, TimeoutException { + memcachedClient.set("hello", 0, "Hello,cluster xmemcached"); + String value = memcachedClient.get("hello"); + System.out.println("hello=" + value); + memcachedClient.delete("hello"); + value = memcachedClient.get("hello"); + System.out.println("hello=" + value); + } +} diff --git a/spring/spring-redis-annotation/pom.xml b/spring/spring-redis-annotation/pom.xml new file mode 100644 index 0000000..0f5e167 --- /dev/null +++ b/spring/spring-redis-annotation/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + com.heibaiying + spring-redis-annotation + 1.0-SNAPSHOT + + 5.1.3.RELEASE + + + + + org.springframework + spring-context + ${spring-base-version} + + + org.springframework + spring-beans + ${spring-base-version} + + + org.springframework + spring-core + ${spring-base-version} + + + org.springframework + spring-web + ${spring-base-version} + + + org.springframework + spring-webmvc + ${spring-base-version} + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.projectlombok + lombok + 1.18.4 + provided + + + + junit + junit + 4.12 + test + + + org.springframework + spring-test + ${spring-base-version} + test + + + org.projectlombok + lombok + 1.18.4 + provided + + + + redis.clients + jedis + 3.0.0 + + + org.redisson + redisson + 3.9.1 + + + + io.netty + netty-all + 4.1.32.Final + + + + \ No newline at end of file diff --git a/spring/spring-redis-annotation/src/main/java/com/heibaiying/bean/Programmer.java b/spring/spring-redis-annotation/src/main/java/com/heibaiying/bean/Programmer.java new file mode 100644 index 0000000..5cff5ab --- /dev/null +++ b/spring/spring-redis-annotation/src/main/java/com/heibaiying/bean/Programmer.java @@ -0,0 +1,25 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author : heibaiying + * @description : + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Programmer { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/RedisProperty.java b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/RedisProperty.java new file mode 100644 index 0000000..54effa8 --- /dev/null +++ b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/RedisProperty.java @@ -0,0 +1,33 @@ +package com.heibaiying.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; +import org.springframework.context.annotation.PropertySource; + +/** + * @author : heibaiying + * @description : + */ + +@Configuration +@PropertySource(value = "classpath:jedis.properties") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RedisProperty { + + @Value("${redis.host}") + private String host; + @Value("${redis.port}") + private int port; + @Value("${redis.timeout}") + private int timeout; + @Value("${redis.maxIdle}") + private int maxIdle; + @Value("${redis.maxTotal}") + private int maxTotal; +} diff --git a/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/jedis/ClusterJedisConfig.java b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/jedis/ClusterJedisConfig.java new file mode 100644 index 0000000..4aa8af8 --- /dev/null +++ b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/jedis/ClusterJedisConfig.java @@ -0,0 +1,32 @@ +package com.heibaiying.config.jedis; + +import com.heibaiying.config.RedisProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.JedisPoolConfig; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author : heibaiying + * @description : Jedis 集群配置 + */ +@Configuration +@ComponentScan(value = "com.heibaiying.*") +public class ClusterJedisConfig { + + @Bean + public JedisCluster jedisCluster(RedisProperty property) { + JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxIdle(property.getMaxIdle()); + poolConfig.setMaxTotal(property.getMaxTotal()); + Set nodes = new HashSet(); + nodes.add(new HostAndPort("127.0.0.1", 6379)); + nodes.add(new HostAndPort("127.0.0.1", 6380)); + return new JedisCluster(nodes, 2000); + } +} diff --git a/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/jedis/SingleJedisConfig.java b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/jedis/SingleJedisConfig.java new file mode 100644 index 0000000..7d43af4 --- /dev/null +++ b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/jedis/SingleJedisConfig.java @@ -0,0 +1,35 @@ +package com.heibaiying.config.jedis; + +import com.heibaiying.config.RedisProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE; + +/** + * @author : heibaiying + * @description : Jedis 单机配置 + */ +@Configuration +@ComponentScan(value = "com.heibaiying.*") +public class SingleJedisConfig { + + @Bean + public JedisPool jedisPool(RedisProperty property) { + JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxIdle(property.getMaxIdle()); + poolConfig.setMaxTotal(property.getMaxTotal()); + return new JedisPool(poolConfig, property.getHost(), property.getPort(), property.getTimeout()); + } + + @Bean(destroyMethod = "close") + @Scope(value = SCOPE_PROTOTYPE) + public Jedis jedis(JedisPool jedisPool) { + return jedisPool.getResource(); + } +} diff --git a/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/redisson/ClusterRedissonConfig.java b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/redisson/ClusterRedissonConfig.java new file mode 100644 index 0000000..88039b5 --- /dev/null +++ b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/redisson/ClusterRedissonConfig.java @@ -0,0 +1,26 @@ +package com.heibaiying.config.redisson; + +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.springframework.context.annotation.Configuration; + +/** + * @author : heibaiying + * @description : redisson 集群配置 + */ +@Configuration +public class ClusterRedissonConfig { + + //@Bean + public RedissonClient redissonClient() { + Config config = new Config(); + config.useClusterServers() + .setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒 + //可以用"rediss://"来启用SSL连接 + .addNodeAddress("redis://127.0.0.1:6379", "redis://127.0.0.1:6380") + .addNodeAddress("redis://127.0.0.1:6381"); + return Redisson.create(config); + } + +} diff --git a/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/redisson/SingalRedissonConfig.java b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/redisson/SingalRedissonConfig.java new file mode 100644 index 0000000..401072e --- /dev/null +++ b/spring/spring-redis-annotation/src/main/java/com/heibaiying/config/redisson/SingalRedissonConfig.java @@ -0,0 +1,25 @@ +package com.heibaiying.config.redisson; + +import org.redisson.Redisson; +import org.redisson.api.RedissonClient; +import org.redisson.config.Config; +import org.redisson.config.TransportMode; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author : heibaiying + * @description : redisson 单机配置 + */ +@Configuration +public class SingalRedissonConfig { + + @Bean + public RedissonClient redissonClient() { + Config config = new Config(); + config.setTransportMode(TransportMode.NIO); + config.useSingleServer().setAddress("redis://127.0.0.1:6379"); + return Redisson.create(config); + } + +} diff --git a/spring/spring-redis-annotation/src/main/resources/jedis.properties b/spring/spring-redis-annotation/src/main/resources/jedis.properties new file mode 100644 index 0000000..f25cf51 --- /dev/null +++ b/spring/spring-redis-annotation/src/main/resources/jedis.properties @@ -0,0 +1,5 @@ +redis.host=127.0.0.1 +redis.port=6379 +redis.timeout=2000 +redis.maxIdle=8 +redis.maxTotal=16 \ No newline at end of file diff --git a/spring/spring-redis-annotation/src/test/java/heibaiying/jedis/JedisClusterSamples.java b/spring/spring-redis-annotation/src/test/java/heibaiying/jedis/JedisClusterSamples.java new file mode 100644 index 0000000..a2782a1 --- /dev/null +++ b/spring/spring-redis-annotation/src/test/java/heibaiying/jedis/JedisClusterSamples.java @@ -0,0 +1,42 @@ +package heibaiying.jedis; + +import com.heibaiying.config.jedis.ClusterJedisConfig; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import redis.clients.jedis.JedisCluster; + +/** + * @author : heibaiying + * @description :redis 集群测试 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = ClusterJedisConfig.class) +public class JedisClusterSamples { + + @Autowired + private JedisCluster jedisCluster; + + @Test + public void Set() { + jedisCluster.set("hello", "spring"); + } + + @Test + public void Get() { + String s = jedisCluster.get("hello"); + System.out.println(s); + } + + @Test + public void setEx() { + String s = jedisCluster.setex("spring", 10, "我会在10秒后过期"); + System.out.println(s); + } + + +} diff --git a/spring/spring-redis-annotation/src/test/java/heibaiying/jedis/JedisSamples.java b/spring/spring-redis-annotation/src/test/java/heibaiying/jedis/JedisSamples.java new file mode 100644 index 0000000..53f265e --- /dev/null +++ b/spring/spring-redis-annotation/src/test/java/heibaiying/jedis/JedisSamples.java @@ -0,0 +1,41 @@ +package heibaiying.jedis; + +import com.heibaiying.config.jedis.SingleJedisConfig; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import redis.clients.jedis.Jedis; + +/** + * @author : heibaiying + * @description :redis 单机版测试 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = SingleJedisConfig.class) +public class JedisSamples { + + @Autowired + private Jedis jedis; + + @Test + public void Set() { + jedis.set("hello", "spring annotation"); + } + + @Test + public void Get() { + String s = jedis.get("hello"); + System.out.println(s); + } + + @Test + public void setEx() { + String s = jedis.setex("spring", 10, "我会在10秒后过期"); + System.out.println(s); + } + +} diff --git a/spring/spring-redis-annotation/src/test/java/heibaiying/redisson/RedissonObjectSamples.java b/spring/spring-redis-annotation/src/test/java/heibaiying/redisson/RedissonObjectSamples.java new file mode 100644 index 0000000..e2d082a --- /dev/null +++ b/spring/spring-redis-annotation/src/test/java/heibaiying/redisson/RedissonObjectSamples.java @@ -0,0 +1,50 @@ +package heibaiying.redisson; + +import com.heibaiying.bean.Programmer; +import com.heibaiying.config.jedis.ClusterJedisConfig; +import com.heibaiying.config.redisson.SingalRedissonConfig; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Date; + +/** + * @author : heibaiying + * @description :redisson 对象序列化与反序列化 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = SingalRedissonConfig.class) +public class RedissonObjectSamples { + + @Autowired + private RedissonClient redissonClient; + + // Redisson的对象编码类是用于将对象进行序列化和反序列化 默认采用Jackson + + @Test + public void Set() { + RBucket rBucket = redissonClient.getBucket("programmer"); + rBucket.set(new Programmer("xiaoming", 12, 5000.21f, new Date())); + redissonClient.shutdown(); + //存储结果: {"@class":"com.heibaiying.com.heibaiying.bean.Programmer","age":12,"birthday":["java.util.Date",1545714986590],"name":"xiaoming","salary":5000.21} + } + + @Test + public void Get() { + RBucket rBucket = redissonClient.getBucket("programmer"); + System.out.println(rBucket.get()); + } + + @After + public void close() { + redissonClient.shutdown(); + } +} diff --git a/spring/spring-redis-annotation/src/test/java/heibaiying/redisson/RedissonSamples.java b/spring/spring-redis-annotation/src/test/java/heibaiying/redisson/RedissonSamples.java new file mode 100644 index 0000000..20e7197 --- /dev/null +++ b/spring/spring-redis-annotation/src/test/java/heibaiying/redisson/RedissonSamples.java @@ -0,0 +1,55 @@ +package heibaiying.redisson; + +import com.heibaiying.config.redisson.SingalRedissonConfig; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.concurrent.TimeUnit; + +/** + * @author : heibaiying + * @description :redisson 操作普通对象 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = SingalRedissonConfig.class) +public class RedissonSamples { + + @Autowired + private RedissonClient redissonClient; + + @Test + public void Set() { + // key 存在则更新 不存在则删除 + RBucket rBucket = redissonClient.getBucket("redisson"); + rBucket.set("annotation Value"); + redissonClient.shutdown(); + } + + @Test + public void Get() { + // key 存在则更新 不存在则删除 + RBucket rBucket = redissonClient.getBucket("redisson"); + System.out.println(rBucket.get()); + } + + @Test + public void SetEx() { + // key 存在则更新 不存在则删除 + RBucket rBucket = redissonClient.getBucket("redissonEx"); + rBucket.set("我在十秒后会消失", 10, TimeUnit.SECONDS); + } + + + @After + public void close() { + redissonClient.shutdown(); + } +} diff --git a/spring/spring-redis/pom.xml b/spring/spring-redis/pom.xml new file mode 100644 index 0000000..96775cb --- /dev/null +++ b/spring/spring-redis/pom.xml @@ -0,0 +1,92 @@ + + + 4.0.0 + + com.heibaiying + spring-redis + 1.0-SNAPSHOT + + + 5.1.3.RELEASE + + + + + org.springframework + spring-context + ${spring-base-version} + + + org.springframework + spring-beans + ${spring-base-version} + + + org.springframework + spring-core + ${spring-base-version} + + + org.springframework + spring-web + ${spring-base-version} + + + org.springframework + spring-webmvc + ${spring-base-version} + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.projectlombok + lombok + 1.18.4 + provided + + + + junit + junit + 4.12 + test + + + org.springframework + spring-test + ${spring-base-version} + test + + + org.projectlombok + lombok + 1.18.4 + provided + + + + redis.clients + jedis + 3.0.0 + + + org.redisson + redisson + 3.9.1 + + + + io.netty + netty-all + 4.1.32.Final + + + + + \ No newline at end of file diff --git a/spring/spring-redis/src/main/java/com/heibaiying/bean/Programmer.java b/spring/spring-redis/src/main/java/com/heibaiying/bean/Programmer.java new file mode 100644 index 0000000..5cff5ab --- /dev/null +++ b/spring/spring-redis/src/main/java/com/heibaiying/bean/Programmer.java @@ -0,0 +1,25 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author : heibaiying + * @description : + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Programmer { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/spring/spring-redis/src/main/resources/jedis/jedis.properties b/spring/spring-redis/src/main/resources/jedis/jedis.properties new file mode 100644 index 0000000..f25cf51 --- /dev/null +++ b/spring/spring-redis/src/main/resources/jedis/jedis.properties @@ -0,0 +1,5 @@ +redis.host=127.0.0.1 +redis.port=6379 +redis.timeout=2000 +redis.maxIdle=8 +redis.maxTotal=16 \ No newline at end of file diff --git a/spring/spring-redis/src/main/resources/jedis/jedis.xml b/spring/spring-redis/src/main/resources/jedis/jedis.xml new file mode 100644 index 0000000..431cdbd --- /dev/null +++ b/spring/spring-redis/src/main/resources/jedis/jedis.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-redis/src/main/resources/jedis/jedisCluster.xml b/spring/spring-redis/src/main/resources/jedis/jedisCluster.xml new file mode 100644 index 0000000..e505247 --- /dev/null +++ b/spring/spring-redis/src/main/resources/jedis/jedisCluster.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-redis/src/main/resources/redisson/redisson.xml b/spring/spring-redis/src/main/resources/redisson/redisson.xml new file mode 100644 index 0000000..a1ebd49 --- /dev/null +++ b/spring/spring-redis/src/main/resources/redisson/redisson.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-redis/src/main/resources/redisson/redissonCluster.xml b/spring/spring-redis/src/main/resources/redisson/redissonCluster.xml new file mode 100644 index 0000000..6e20bdd --- /dev/null +++ b/spring/spring-redis/src/main/resources/redisson/redissonCluster.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-redis/src/main/resources/springApplication.xml b/spring/spring-redis/src/main/resources/springApplication.xml new file mode 100644 index 0000000..54c5440 --- /dev/null +++ b/spring/spring-redis/src/main/resources/springApplication.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-redis/src/test/java/com/heibaiying/jedis/JedisClusterSamples.java b/spring/spring-redis/src/test/java/com/heibaiying/jedis/JedisClusterSamples.java new file mode 100644 index 0000000..c013c64 --- /dev/null +++ b/spring/spring-redis/src/test/java/com/heibaiying/jedis/JedisClusterSamples.java @@ -0,0 +1,45 @@ +package com.heibaiying.jedis; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.JedisPool; + +/** + * @author : heibaiying + * @description :redis 集群测试 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration({"classpath:springApplication.xml"}) +public class JedisClusterSamples { + + @Autowired + private JedisCluster jedisCluster; + + @Test + public void Set() { + jedisCluster.set("hello", "spring"); + } + + @Test + public void Get() { + String s = jedisCluster.get("hello"); + System.out.println(s); + } + + @Test + public void setEx() { + String s = jedisCluster.setex("spring", 10, "我会在10秒后过期"); + System.out.println(s); + } + + +} diff --git a/spring/spring-redis/src/test/java/com/heibaiying/jedis/JedisSamples.java b/spring/spring-redis/src/test/java/com/heibaiying/jedis/JedisSamples.java new file mode 100644 index 0000000..f7e4c61 --- /dev/null +++ b/spring/spring-redis/src/test/java/com/heibaiying/jedis/JedisSamples.java @@ -0,0 +1,43 @@ +package com.heibaiying.jedis; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; + +/** + * @author : heibaiying + * @description :redis 单机版测试 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration({"classpath:springApplication.xml"}) +public class JedisSamples { + + @Autowired + private Jedis jedis; + + @Test + public void Set() { + jedis.set("hello", "spring"); + } + + @Test + public void Get() { + String s = jedis.get("hello"); + System.out.println(s); + } + + @Test + public void setEx() { + String s = jedis.setex("spring", 10, "我会在10秒后过期"); + System.out.println(s); + } + +} diff --git a/spring/spring-redis/src/test/java/com/heibaiying/redisson/RedissonObjectSamples.java b/spring/spring-redis/src/test/java/com/heibaiying/redisson/RedissonObjectSamples.java new file mode 100644 index 0000000..6701175 --- /dev/null +++ b/spring/spring-redis/src/test/java/com/heibaiying/redisson/RedissonObjectSamples.java @@ -0,0 +1,49 @@ +package com.heibaiying.redisson; + +import com.heibaiying.bean.Programmer; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +/** + * @author : heibaiying + * @description :redisson 对象序列化与反序列化 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration({"classpath:springApplication.xml"}) +public class RedissonObjectSamples { + + @Autowired + private RedissonClient redissonClient; + + // Redisson的对象编码类是用于将对象进行序列化和反序列化 默认采用Jackson + + @Test + public void Set() { + RBucket rBucket = redissonClient.getBucket("programmer"); + rBucket.set(new Programmer("xiaoming", 12, 5000.21f, new Date())); + redissonClient.shutdown(); + //存储结果: {"@class":"com.heibaiying.bean.Programmer","age":12,"birthday":["java.util.Date",1545714986590],"name":"xiaoming","salary":5000.21} + } + + @Test + public void Get() { + RBucket rBucket = redissonClient.getBucket("programmer"); + System.out.println(rBucket.get()); + } + + @After + public void close() { + redissonClient.shutdown(); + } +} diff --git a/spring/spring-redis/src/test/java/com/heibaiying/redisson/RedissonSamples.java b/spring/spring-redis/src/test/java/com/heibaiying/redisson/RedissonSamples.java new file mode 100644 index 0000000..02f843f --- /dev/null +++ b/spring/spring-redis/src/test/java/com/heibaiying/redisson/RedissonSamples.java @@ -0,0 +1,54 @@ +package com.heibaiying.redisson; + +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.concurrent.TimeUnit; + +/** + * @author : heibaiying + * @description :redisson 操作普通对象 + */ + + +@RunWith(SpringRunner.class) +@ContextConfiguration({"classpath:springApplication.xml"}) +public class RedissonSamples { + + @Autowired + private RedissonClient redissonClient; + + @Test + public void Set() { + // key 存在则更新 不存在则删除 + RBucket rBucket = redissonClient.getBucket("redisson"); + rBucket.set("firstValue"); + redissonClient.shutdown(); + } + + @Test + public void Get() { + // key 存在则更新 不存在则删除 + RBucket rBucket = redissonClient.getBucket("redisson"); + System.out.println(rBucket.get()); + } + + @Test + public void SetEx() { + // key 存在则更新 不存在则删除 + RBucket rBucket = redissonClient.getBucket("redissonEx"); + rBucket.set("我在十秒后会消失", 10, TimeUnit.SECONDS); + } + + + @After + public void close() { + redissonClient.shutdown(); + } +}