本篇博客只介紹 redis 做爲緩存的的一些使用,以及在項目中如何把redis和spring如何集成。java
1:redis的maven依賴,redis 依賴 spring-redis 依賴;redis
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${redis.version}</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>${spring.redis.version}</version> </dependency>
2:redis 配置 整合spring的配置spring
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="1" /> <property name="maxTotal" value="5" /> <property name="blockWhenExhausted" value="true" /> <property name="maxWaitMillis" value="30000" /> <property name="testOnBorrow" value="true" /> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="localhost" /> <property name="port" value="6379"/> <property name="poolConfig" ref="jedisPoolConfig" /> <property name="usePool" value="true"/> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/> </property> <property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> </property> </bean>
接下來就能夠在項目中使用redis了,這裏使用的是spring的redisTemplate,只須要在項目中注入 redisTemplate 就能夠直接使用了。緩存
如下爲使用redisTemplate來操做redis;數據結構
1:redis 中自增的操做:這種自增是原子性的,能夠用在高併發的場景,如 庫存的秒殺併發
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-redis.xml");
RedisTemplate redisTemplate = (RedisTemplate) ctx.getBean("redisTemplate");
// redis 自增
Long beppe = redisTemplate.opsForValue().increment("beppe", 2);
System.out.println(beppe);
2:String 類型的操做maven
// String 類型 ValueOperations valueOpe = redisTemplate.opsForValue(); valueOpe.set("user:name","哈哈哈"); String userName = (String)valueOpe.get("user:name"); System.out.println(userName);
3:list操做;高併發
// List 類型 list是不去重存儲 ListOperations listOps = redisTemplate.opsForList(); listOps.leftPush("user:redis","beppe1"); listOps.leftPush("user:redis","beppe2"); listOps.leftPush("user:redis","beppe3"); List list = listOps.range("user:redis", 0, -1); //這裏 0,-1 表示獲取 list 全部內容 // String o = (String)listOps.leftPop("user:redis"); System.out.println(list);
4:Hash 操做;spa
// hash 類型 有兩種操做形式 1:put 一個元素一個元素添加 putAll 一次性添加一個Map HashOperations opHash = redisTemplate.opsForHash(); // opHash.put("mykey1","city1","shanghai"); // opHash.put("mykey2","city2","beijing"); HashMap<String, String> map = new HashMap<>(); map.put("city1","shanghai1"); map.put("city2","shanghai2"); map.put("city3","shanghai3"); map.put("city4","shanghai4"); opHash.putAll("citya:redis",map); Map entries = opHash.entries("citya:redis"); System.out.println(entries);
5:set類型操做;code
// set類型 SetOperations setOper = redisTemplate.opsForSet(); Set<String> set = new HashSet<String>(); set.add("beppe1"); set.add("beppe2"); set.add("beppe2"); set.add("beppe3"); setOper.add("set:redis",set); Set<String> pop = (Set<String>)setOper.pop("set:redis"); for (String str: pop) { System.out.println(str); }
以上幾種就是redis存儲數據的幾種數據結構的操做;
下篇博客會 介紹使用 redis 來實現發佈訂閱的功能;