redis 缓存
本篇博客只介绍 redis 作为缓存的的一些使用,以及在项目中如何把redis和spring如何集成。
1:redis的maven依赖,redis 依赖 spring-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的配置
<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 类型的操作
// 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 操作;
// 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类型操作;
// 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 来实现发布订阅的功能;