参考Spring Data Redis官方文档:https://docs.spring.io/spring-data/redis/docs/2.1.3.RELEASE/reference/html/
下面的例子会在我的github中呈现:https://github.com/sunkang123/redis
下面的例子只是展示最常用的使用,更多的详细用法参考官方文档
1.环境准备和配置文件准备
需要搭建一台redis服务,并启动服务
-
首先来看项目的结构
项目增加maven的依赖
junit
junit
4.11
test
org.springframework.data
spring-data-redis
1.6.1.RELEASE
redis.clients
jedis
2.9.0
commons-logging
commons-logging
1.2
org.slf4j
slf4j-api
1.6.1
- redis的连接池参数配置文件redis.properties
# Redis settings
redis.host=192.168.44.129
redis.port=6379
redis.pass=
#最大空闲数:空闲链接数大于maxIdle时,将进行回收
redis.maxIdle=300
#最大连接数:能够同时建立的“最大链接个数”
redis.MaxTotal=600
#最大等待时间:单位ms
redis.maxWait=1000
#使用连接时,检测连接是否成功
redis.testOnBorrow=true
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
redis.timeout=10000
- redis与spring整合的配置文件applicationContext-redis.xml
-
2.StringRedisTemplate的简单使用
直接放代码
- RedisTemplateExample测试
/**
* @Project: redis
* @description: StringRedisTemplate 的简单使用
* @author: sunkang
* @create: 2019-01-12 21:12
* @ModificationHistory who when What
**/
public class RedisTemplateExample {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-redis.xml");
RedisTemplate redisTemplate = context.getBean("redisTemplate",StringRedisTemplate.class);
//对普通字符串操 ,下面的两个方式相同
//方式一: Key Type Operations
redisTemplate.opsForValue().set("string","key");
//方式二:Key Bound Operations
redisTemplate.boundValueOps("string").set("key1");
//对list进行操作
//方式一: Key Type Operations
redisTemplate.opsForList().leftPush("listKey","element");
//方式二:Key Bound Operations
redisTemplate.boundListOps("listKey").rightPush("element2");
List list = redisTemplate.opsForList().range("listKey",0,-1);
System.out.println(list);
//其他的数据接口方式不再演示
//hash
redisTemplate.opsForHash().put("hash","key1","values");
//set
redisTemplate.opsForSet().add("set","set1","set2");
//HyperLogLog
redisTemplate.opsForHyperLogLog().add("hyper","123");
//zset
redisTemplate.opsForZSet().add("zset","number1",1);
//使用RedisCallback 接口来操作数据
redisTemplate.execute(new RedisCallback() {
@Override
public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
Long size = redisConnection.dbSize();
//直接使用StringRedisConnection连接实例来操作数据
StringRedisConnection connection = (StringRedisConnection) redisConnection;
connection.set("key","value");
return null;
}
});
//HashMapping 对象和map互相转换
Person person = new Person();
person.setFirstname("sun");
person.setLastname("kang");
//写进redis
writeHash("person",person,redisTemplate);
//从reids获取数据
Person person1 = loadHash("person",redisTemplate);
System.out.println(person1);
//使用pipeline
redisTemplate.executePipelined(new RedisCallback
在需要存在实体的时候,可以用mapper的结构来代替javabean的实体存储,就会涉及到map到entity的转换过程,所以还需要一个HashMapper实体来转换mapper与实体的关系。还需要一个具体的实体类
- PersonHashMapper 来转换实体与map对象
/**
* @Project: redis
* @description: 需要继承HashMapper 这个接口重写
* @author: sunkang
* @create: 2019-01-12 22:51
* @ModificationHistory who when What
**/
public class PersonHashMapper implements HashMapper {
@Override
public Map toHash(Person person) {
Map map = new HashMap();
map.put("firstname",person.getFirstname());
map.put("lastname",person.getLastname());
return map;
}
@Override
public Person fromHash(Map map) {
Person person = new Person();
person.setFirstname( map.get("firstname"));
person.setLastname( map.get("lastname"));
return person;
}
}
- person实体
/**
* @Project: redis
* @description: person实体
* @author: sunkang
* @create: 2019-01-12 22:46
* @ModificationHistory who when What
**/
public class Person {
private String firstname;
private String lastname;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
@Override
public String toString() {
return "Person{" +
"firstname='" + firstname + '\'' +
", lastname='" + lastname + '\'' +
'}';
}
}