由于最近项目所需捣鼓了下非关系型数据库,今天就简单讲述下这段时间的对redis/mongo等NoSQL总结.我记得两年前做项目用redis做缓存策略时,一大堆要搭建的环境/配置等等.不得不说Spring是个好东西,集成的redis简直是提倡快速开发者的梦中情人啊.闲话少说,必要的依赖:
compile("org.springframework.boot:spring-boot-starter-data-redis")
这货会自动下载对应版本spring-data-redis和jedis客户端,支持您的敏捷开发.当然不想用这玩意,您的版本控制也可以尝试用parent.配置application.yaml文件(注意:Java下应该是.properties文件):
spring:
redis:
host: 127.0.0.1
port: 6379
测试环境下其余的36000+个都不需要设置了,如果您非要自行google.多说一丢丢...开发实践中集群策略设置主机(以逗号分隔的“主机:端口”对列表进行引导。 # spring.redis.cluster.nodes=)
测试类:
data class User(
open var id: String = "",
open var name: String = "",
open var age: Int = 0,
open var sex: Gender = Gender.MALE
) : Serializable {
override fun toString(): String {
return "User(id='$id', name='$name', age=$age, sex=$sex)"
}
}
Repository:
@Repository
class UserRepository {
@Resource
lateinit var redisTemplate: RedisTemplate<String, User>
@Autowired
lateinit var template: StringRedisTemplate
fun setKey(key: String, value: User) =
redisTemplate.opsForValue().set(key, value)
fun getKey(key: String) = redisTemplate.opsForValue().get(key)
}
注意:这里我注入有两个Template,这些都被spring boot 自动配置就不要较这个真了,有兴趣去查看下源码.redisTemplate必须加@Resource(默认名称装配)而非@Autowired(默认类型装配),spring官方文档 31.1.1 Connecting to Redis 有解释:
If you add your own @Bean of any of the auto-configured types, it replaces the default (except in the case of RedisTemplate, when the exclusion is based on the bean name, redisTemplate, not its type). By default, if commons-pool2 is on the classpath, you get a pooled connection factory.
否则会抛出NoSuchBeanDefinitionException.
@RestController
class UserController {
@Autowired
lateinit var repository: UserRepository
@RequestMapping("/set")
fun set(): String {
repository.setKey("1", User("1", "先生", 22, Gender.MALE))
return "success"
}
@RequestMapping("/get")
fun get(): User =
repository.getKey("1")
}
开启Redis-Server.exe(需要本地下载安装并运行redis服务,如需服务自行移步至google)
开启spring boot(run boot)
浏览器访问:http://localhost:8080/set 后再访问:http://localhost:8080/get
至此大功告成,当然这仅仅是敏捷开发先行了解的一小部分,接下来我们会对spring-data-redis做更加深入的探讨,并尝试放开spring boot 自定义需求redis使之更加符合实际需求.