本篇博客只介绍 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 >
<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 >
<property name="hostName" value="localhost" />
<property name="port" value="6379"/>
<property name="poolConfig" ref="jedisPoolConfig" />
<property name="usePool" value="true"/>
</bean>
<bean >
<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 来实现发布订阅的功能;