1.1Redis简介
1.2:作为数据库,Redis 是一个速度非常快的非关系数据库(Non.Relational Database),它可以存储键(Key)与5种不同类型的值(Value)之间的映射(Mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。
作为缓存中间件,相比 Memcached,Redis支持更多的数据结构和更丰富的数据操作,另外 Redis有着丰富的集群方案和使用场景。
1.2 数据类型
Redis 数据类型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的 NoSQL 键值数据存储。Redis 数据类型类似于编程语言的基础数据类型,因此开发人员感觉很自然,每个数据类型都支持适用于其类型的操作,受支持的数据类型包括:
String(字符串)
Hash(哈希)
List(列表)
Set(集合)
Zset (Sorted Set:有序集合)
1.3关键优势
Redis 的优势包括它的速度、对富数据类型的支持、操作的原子性,以及通用性:
(1)性能极高,它每秒可执行约100,000个Set以及约100,000个 Get操作.
(2);丰富的数据类型,Redis对大多数开发人员已知的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决.
(3)原子性,因为所有Redis 操作都是原子性的,所以多个客户端会并发地访问一个Redis 服务器,获取相同的更新值;
(4)丰富的特性,Redis 是一个多效用工具,有非常多的应用场景,包括缓存、消息队列(Redis原生支持发布/订阅)、短期应用程序数据(比如Web会话、Web页面命中计数)等。
2.1:Redis基本使用
(1)Windows安装
下载地址:http://github.com/MSOpenTech/redis/releases
(2)Redis支持32位和64位,这个需要根据你的系统平台的实际情况选择,这里我们下载Redis-x64-3.2.100.zip压缩包,解压到D:\redis.
2.2:配置
(1)安装后,在不配置Redis的情况下,Redis也可以直接启动,因为有一个默认配置文件。在官方发布的版本中一般叫做redis.conf,而在本教程中使用的是windows编译的版本,配置文件改为叫做 redis.windows.conf。这个文件中包含了Redis各方面的配置,注意大部分配置行都是英文且以#开头,表示注释,只有不以#开头的行才是生效的配置项。具体配置项大家有兴趣可
以自行补充了解,这里只简单介绍几个跟我们本次课程关系比较紧密的配置项:
bind 127.0.0.1:绑定的主机
port 6379:端口号
requirepass foobared:请求密码,默认是注释的
save 900 1、save 300 10、save 60 10000:同步数据文件
3.3:启动
(1)打开一个CMD窗口
(2)使用cd命令切换目录到 :
D:\redis 运行redis-server.exe redis.windows.conf
(3)如果想方便的话,可以把redis的路径加到系统环境变量path里,这样就省得再输路径了输入之后,显示如下界面,表示服务启动成功(注意,启动之后cmd窗口不能关闭).
3.4:连接
(1)在打开一个CMD窗口
(2)使用CD命令切换目录到D:\ redis运行:
无密码:redis-cli.exe -h 127.0.0.1 -p 6379
有密码:redis-cli.exe -h 127.0.0.1 -p 6379 -a foobared
输入完成后,显示以下界面,表示连接成功:
3.5:简单操作
(1)使用set, get 命令进行数据的简单写和读:
4.0:可视化工具
(1)在开发期间要查看Redis服务器中存储的数据,可以命令行启动redis-cli。为了提高开发效率,可以再安装一个很好用的GUI工具:Redis Desktop Manager.
(2)下载地址为:https://redisdesktop.com/
(3)在 Redis 服务器启动的情况下,打开 Redis Desktop Manager,点击如下按钮添加一个服务器端的配置信息,进行连接。
(4)然后双击这个服务器的配置,连接成功就可以看到Redis服务器目前缓存的Key-Value集合了.
5.0:Jedis 操作 Redis
Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis 中间件,Jedis的基本使用非常简单,只需要创建Jedis对象的时候host,port,password即可。当然,Jedis对象有很多构造方法,都大同小异,只是对应和Redis 连接的socket的参数不一样而已。
5.1 常用方法API
在Jedis库中,Jedis类就代表了与Redis服务器的连接,因此对服务器的操作都是通过它来进行,Redis的各种操作命令在Jedis类中也直接体现为同名的方法。
Jedis 对象常用方法API,包括对键操作、字符串操作、整数和浮点数操作、列表(List)操作、集合(Set)操作、哈希(Hash)操作、有序集合(Zsort)操作、排序操作等几大类,由于篇幅限制,
请大家自行查阅:https://blog.csdn.net/asd051377305/article/details/90234620:
添加jedis依赖
连接池
6.0: SpringBoot 操作 Redis。
(1)spring-boot-starter-data-redis
Spring Boot 提供了对 Redis 集成的组件包:spring-boot-starter-data-redis,它依赖于spring-data-redis 和 lettuce。Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成了 Lettuce,但如果你从 Spring Boot 1.5.X切换过来,几乎感受不大差异,这是因为spring-boot-starter-data-redis 为我们隔离了其中的差异性。
(2)Lettuce:是一个可伸缩线程安全的 Redis客户端,多个线程可以共享同一个RedisConnection,它利用优秀 Netty NIO框架来高效地管理多个连接。
(3)Spring Data:是 Spring 框架中的一个主要项目,目的是为了简化构建基于 Spring框架应用的数据访问,包括非关系数据库、Map-Reduce 框架、云数据服务等,另外也包含对关系数据库的访问支持。
(4)Spring Data Redis: 是 Spring Data 项目中的一个主要模块,实现了对 Redis 客户端 API的高度封装,使对 Redis 的操作更加便捷。
(5)因此 Spring Data Redis 和 Lettuce 具备的功能,spring-boot-starter-data-redis 几乎都会有。
添加依赖
6.1:application.properties 相关配置
6.2:在测试中注入StringRedisTemplate 和 RedisTemplate
6.3:StringRedisTemplate 与 RedisTemplate 区别点:
(1)两者的关系是 StringRedisTemplate 继承 RedisTemplate。
(2)两者的数据是不共通的;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate里面的数据,RedisTemplate只能管理 RedisTemplate中的数据。
(3)其实他们两者之间的区别主要在于他们使用的序列化类:
RedisTemplate 使用的是JdkSerializationRedisSerializer,存入数据会将数据先序列化成字节数组然后在存入Redis数据库。
StringRedisTemplate 使用的是 StringRedisSerializer
(4)使用时注意事项:
当你的redis数据库里面本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。
(5)但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。
1.RedisTemplate中定义了五种数据结构操作:
(1)redisTemplate.opsForValue();//操作字符串
(2)redisTemplate.opsForHash();//操作hash
(3)redisTemplate.opsForList();//操作list
(4)redisTemplate.opsForSet();//操作set
(5)redisTemplate.opsForZSet();//操作有序set
2.StringRedisTemplate常用方法
(1.)stringRedisTemplate.opsForValue().set(“test",“100”,60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
(2.). stringRedisTemplate.boundValueOps(“test").increment(-1);//val 做-1操作
(3.) stringRedisTemplate.opsForValue().get(“test”)//根据 key获取缓存中的val
(4.)stringRedisTemplate.boundValueOps(“test”).increment(1);//val +1
(5.)stringRedisTemplate.getExpire(“test”)//根据key获取过期时间
(6.) stringRedisTemplate.getExpire(“test”,TimeUnit.SECONDS)//根据 key 获取过期时间并换算成指定单位
(7) stringRedisTemplate,delete(“test”);//根据key 删除浸存
(8.) stringRedisTemplate.hasKey(”546545”);//检查key是否存在,返回boolean 值
(9.)stringRedisTemplate.opsForSet().add(“red_123”,“1”,"2”,“3”);//向指定key中存放set集合
(10.)stringRedisTemplate.expire(“red_123”,1808,TimeUnit.NILLISECONDS);//设置过期时间
(11.) stringRedisTemplate.opsForSet().isMember("red_123”,“1”)//根据key查看集合中是否存在指定数据
(12.)stringRedisTemplate.opsforSet().members(“red_123”);//根据 key 获以set集合