1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.修改配置文件
spring.redis.database=10 //选择的数据库
spring.redis.host=192.***** //主机ip
spring.redis.port=6379 //端口
3.写config类
package com.qhz.spring_redis.spring_redis.Config;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
//设置key的 序列化方式
template.setKeySerializer(RedisSerializer.string());
//设置valuse的序列化方式
template.setValueSerializer(RedisSerializer.json());
//设置hash的key的序列化方式
template.setKeySerializer(RedisSerializer.string());
//设置hash的value的序列化方式
template.setValueSerializer(RedisSerializer.json());
template.afterPropertiesSet();
return template;
}
}
4.使用RedisTemplate
package com.qhz.spring_redis.spring_redis;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import java.util.concurrent.TimeUnit;
@SpringBootTest
class SpringRedisApplicationTests {
@Autowired
RedisTemplate redisTemplate;
@Test
void contextLoads() {
}
@Test
void toStrings(){
String redisKey = "test:count";
redisTemplate.opsForValue().set(redisKey,1);
System.out.println(redisTemplate.opsForValue().get(redisKey));
System.out.println(redisTemplate.opsForValue().increment(redisKey));
System.out.println(redisTemplate.opsForValue().decrement(redisKey));
}
@Test
void testHash(){
String rediskey ="test:hash";
redisTemplate.opsForHash().put(rediskey,"id",1);
redisTemplate.opsForHash().put(rediskey,"username","秋海");
redisTemplate.opsForHash().put(rediskey,"age",20);
System.out.println(redisTemplate.opsForHash().get(rediskey, "id"));
System.out.println(redisTemplate.opsForHash().get(rediskey, "username"));
System.out.println(redisTemplate.opsForHash().get(rediskey, "age"));
}
@Test
void testList(){
String rediskey = "test:ids";
redisTemplate.opsForList().leftPush(rediskey,101);
System.out.println(redisTemplate.opsForList().size(rediskey));
System.out.println(redisTemplate.opsForList().index(rediskey,0));
System.out.println(redisTemplate.opsForList().range(rediskey,0,2));
System.out.println(redisTemplate.opsForList().rightPop(rediskey));
System.out.println(redisTemplate.opsForList().rightPop(rediskey));
System.out.println(redisTemplate.opsForList().rightPop(rediskey));
}
@Test
void testSets(){
String rediskey = "test:teachers";
redisTemplate.opsForSet().add(rediskey,"刘备" ,"关羽" ,"张飞","赵云");
System.out.println(redisTemplate.opsForSet().size(rediskey));
System.out.println(redisTemplate.opsForSet().pop(rediskey));
System.out.println(redisTemplate.opsForSet().members(rediskey));
}
@Test
void testSortedSets(){
String rediskey = "test:student";
redisTemplate.opsForZSet().add(rediskey,"唐僧",50);
redisTemplate.opsForZSet().add(rediskey,"八戒",50);
redisTemplate.opsForZSet().add(rediskey,"沙僧",70);
redisTemplate.opsForZSet().add(rediskey,"悟空",20);
System.out.println(redisTemplate.opsForZSet().zCard(rediskey));
System.out.println(redisTemplate.opsForZSet().score(rediskey,"八戒"));
System.out.println(redisTemplate.opsForZSet().reverseRank(rediskey,"八戒"));
System.out.println(redisTemplate.opsForZSet().range(rediskey,0,2));
System.out.println(redisTemplate.opsForZSet().reverseRange(rediskey,0,2));
}
@Test
void testKeys(){
System.out.println(redisTemplate.hasKey("test:count"));
System.out.println(redisTemplate.delete("test:count"));
System.out.println(redisTemplate.hasKey("test:count"));
System.out.println(redisTemplate.hasKey("test:hash"));
redisTemplate.expire("test:hash",10, TimeUnit.SECONDS);
System.out.println(redisTemplate.hasKey("test:hash"));
try {
Thread.sleep(10);
System.out.println(redisTemplate.hasKey("test:hash"));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 多次访问统一key
@Test
void Bound(){
String rediskey = "test:bound";
BoundValueOperations ops = redisTemplate.boundValueOps(rediskey);
ops.increment();
ops.increment();
ops.increment();
ops.increment();
System.out.println(ops.get());
}
}
5.redis事务
下面为编程式事务
redis事务是讲所有操作命令放在队列中 所以事务中存在查询也不会返回结果
下面程序结果
[]
[2, 1, 1, [wangwu, lizi, zhaoliu, 张三]]
@Test
void testTransactional(){
//redis 事务
Object obj = redisTemplate.execute(new SessionCallback() {
@Override
public Object execute(RedisOperations operations) throws DataAccessException {
String redisKey = "test:tx";
operations.multi();
operations.opsForSet().add(redisKey,"张三","lizi");
operations.opsForSet().add(redisKey,"wangwu");
operations.opsForSet().add(redisKey,"zhaoliu");
System.out.println(operations.opsForSet().members(redisKey));
return operations.exec();
}
}
);
System.out.println(obj);
}