Redis
简介
Redis是一种特殊类型的数据库,它被称为key-value存储。实际上,key-value存储与哈希Map有很大的相似性。可以不大夸张的说,它们就是持久化的哈希Map。
安装Redis
我是用Docker来安装和使用数据库的,Docker用起来还是特别舒服的!
安装Docker
我下载的windows版的,官网下载https://docs.docker-cn.com
注意:要确保开启Hyper-V这个组件才能安装Docker,如果BIOS中没有开启虚拟功能也不行,一般默认是开启的。另外Windows10家庭版是没有Hyper-V这个组件的。(Docker和VMWare虚拟机是不能同时使用的,所以如要使用VMWare就要先关闭Hyper-V功能)
安装好后可在设置界面更改镜像地址,默认下载镜像时是从docker官网下载。:
Docker中安装Redis
打开PowerShell或者Dos命令行窗口,输入docker pull redis 命令来下载redis镜像,默认下载最新版本的redis镜像。(也可下载指定版本的redis镜像,例如docker pull redis:3.2)
因为我已经下载好了,图就不截了。
运行redis镜像
接着输入docker的命令来运行redis镜像。
-d表示在后台运行,不阻塞命令行界面,让我们可继续输入其它命令,是detach单词缩写。
-p 表示端口号,左边的6379表示win10系统的端口(自已换其它的也随便),右边的则表表容器中redis端口。
–name表示运行redis镜像的一个实例名称。
docker run -d -p 6379:6379 –name redis01 redis
再输入命令启动第二个redis容器,注意端口号和实例名不同了。
docker run -d -p 6380:6379 –name redis02 redis
输入docker ps命令查看正在运行的所有容器,如下图
RedisClient桌面工具来连接Docker中的redis
Redis默认是16个数据库,db0~db15.
Spring中使用Redis
导入jedis-2.6.2.jar、spring-data-redis-1.4.2.RELEASE.jar、commons-pool2-2.4.2.jar,注意版本!!!
连接到Redis
Redis官网给出的Java客户端有这么多,推荐使用jedis。
Redis连接工厂会生成到Redis数据库服务器的连接。Spring Data Redis为四种Redis客户端提供了连接工厂:
- JedisConnectionFactory
- JredisConnectionFactory
- LettuceConnectionFactory
- SrpConnectionFactory
具体选择哪个,自己看着来吧!我使用的是jedis,也就是JedisConnectionFactory。
RootConfig.java
@Bean
public RedisConnectionFactory redis()
{
return new JedisConnectionFactory();
}
默认构造器创建的连接工厂会向localhost的6379端口创建连接,并且没有密码。
使用RedisTemplate
Spring Data Redis提供了两个模板:
- RedisTemplate
- StringRedisTemplate
RedisTemplate可以极大地简化Redis数据访问,能够让我们持久化各种类型的key和value,并不局限于字节数组。当key和value通常是String类型之后,StringRedisTemplate扩展了RedisTemplate,只关注String类型。我使用的是RedisTemplate!
RootConfig.java
@Bean
public RedisTemplate<String, String> redisTempl(RedisConnectionFactory redis)
{
RedisTemplate<String, String> redisTempl = new RedisTemplate<String, String>();
redisTempl.setConnectionFactory(redis);
return redisTempl;
}
注入RedisTemplate
@Autowired
private RedisTemplate<String, String> redisTempl;
测试,控制台会输出tom
@RequestMapping("/redis")
public String redis()
{
redisTempl.opsForValue().set("name","tom");
System.out.println(redisTempl.opsForValue().get("name") );
return null;
}
这里我只测试了String类型,其它list或set类型自己测试吧。都差不多!!!
使用key和value的序列化器
当某个条目保存到Redis key-value存储的时候,key和value都会使用Redis的序列化器进行序列化。Spring Data Redis提供了多个这样的序列化器:
- GenericToStringSerializer:使用Spring转换服务进行序列化;
- JacksonJsonRedisSerializer:使用Jackson1,将对象序列化为JSON;
- Jackson2JsonRedisSerializer:使用Jackson2,将对象序列化为JSON;
- JdkSerializationRedisSerializer:使用Java序列化;
- OxmSerializer:使用Spring O/X映射的编排器和解排器实现序列化,用于XML序列化;
- StringRedisSerializer:序列化String类型的key和value;
这些序列化器都实现了RedisSerializer接口。RedisTemplate会使用JdkSerializationRedisSerializer,意味着key和value都会通过Java进行序列化。StringRedisTemplate默认使用StringRedisSerializer。
参考:https://blog.csdn.net/junshangshui/article/details/79417943
以上只是学习所做的笔记,如有错误请指正。谢谢啦!!!