目录
Redis了解 141
一、Redis入门 143
1.1Redis简介 143
1.2Redis下载与安装 143
1.3Redis入门---Redis服务启动 144
1.3.1Redis服务启动
1.3.2设置密码远程连接
二、Redis数据类型 145
三、Redis常用命令 146
3.1Redis常用命令---字符串string操纵命令
3.2Redis常用命令---哈希类型操作命令 147
3.3Redis常用命令---列表List类型操作命令 148
3.4Redis常用命令---集合类型&有序集合类型操作命令 149
编辑3.5Redis常用命令---通用命令 150
四、在Java中操作Redis 151
4.1在Java中操作Redis介绍 151
4.2使用Spring Data Redis操作Redi基础环境&设置序列化器(SpringBoot中使用Redis)152
4.3在Java中操作Redis 使用Sping Data Redis操作Redis 数据类型操作(对应五种数据类型在SpringBoot中的操作) 153-155
Redis了解 141
Mysql:是将数据存到磁盘上,关系型数据库。实际上就是表的关系。
内存的读取速度比磁盘的读取速度快
Redis是讲数据存到内存上,非关系型数据库
优点:Redis处理速度比Mysql快
两者是相互补充的关系。
什么是热点:
热点就是短时间内会有大量用户点击或者使用的情况。
一、Redis入门 143
1.1Redis简介 143
作用:当作缓存数据库使用。
1.2Redis下载与安装 143
Linux版本的安装:
gcc:是在Linux系统中,对c语言进行编译的一个指令
Windows下Redis安装:
1.3Redis入门---Redis服务启动 144
1.3.1Redis服务启动
Linxu服务启动:
输入下面的指令:在所在的工作空间下启动就能够启动Redis服务
步骤一:启动Redis服务
步骤二:连接服务器redis-cli(先进入到文件所在工作空间下)
步骤三:可以查询当前的Redis里面存在哪些key
后台启动Redis服务程序步骤:
步骤一:找到配置文件
步骤二:通过小技巧“/所要找的文件名称”
就能够实现找到所需要的内容信息。
步骤三:输入字母 “i”,变为插入模式,对文件进行修改
注:将该部分的no修改为yes
记得输入“:wq”保存并退出。
步骤四:启动服务器,并要加上redis.config文件
Window服务启动:
注:不需要密码校验。
1.3.2设置密码远程连接
Linxu系统设置客户端登陆密码:
步骤一:在redis.conf文件夹下找到密码,并打开文件
步骤二:修改密码,并保存
实现步骤:
方式一:
方式二:
设置Redis可以被远程连接:
修改redis.conf文件,最后按下esc键,进行保存并退出。
二、Redis数据类型 145
三、Redis常用命令 146
3.1Redis常用命令---字符串string操纵命令
1、将数据值存到value中,使用set指令的数据结果都是字符串的形式。key相同的情况下,同时设置,后面的会覆盖前面的数据内容。
2、获取
3、将数据存到value中,延迟一段时间(可设置)就可以实现将数据进行清理掉
作用:手机验证码的使用,存在一个有效期。
4、作用:用于分布式锁的使用
3.2Redis常用命令---哈希类型操作命令 147
field:字段
value:值
3.3Redis常用命令---列表List类型操作命令 148
1、从头部一个个按顺序向后插入
3、移除操作,相当于是取出元素的功能
3.4Redis常用命令---集合类型&有序集合类型操作命令 149
2、查询集合中的元素,元素是无序排列的。没有顺序。
4、查询两个集合的交集的部分。
5、查询两个集合的并集,并表示输出出来。
6、查询两个集合的差集。这个命令两个集合的顺序是有要求的,是前面的集合减后面的集合
结果:剩余的是:前面的集合中的内容在后面集合中不存在的内容。
3.5Redis常用命令---通用命令 150
四、在Java中操作Redis 151
4.1在Java中操作Redis介绍 151
步骤一:导入maven坐标
步骤二:在IDEA中与Redis进行连接:分为三部分组成
public class JedisTest {
@Test
public void testRedis(){
//1、获取连接
Jedis jedis = new Jedis("localhost",6379);
//2、执行具体的操作
//2-1String数据
jedis.set("username","xiaoming");
String value = jedis.get("username");
System.out.println(value);
// jedis.del("username");//删除key
//2-2哈希值数据
jedis.hset("myhash","addr","bj");
String hValue = jedis.hget("myhash", "addr");
System.out.println(hValue);
//2-3查询所有的Redis的key
Set<String> keys = jedis.keys("*");
for (String key : keys) {
System.out.println(key);
}
//3、关闭连接
jedis.close();
}
4.2使用Spring Data Redis操作Redi基础环境&设置序列化器(SpringBoot中使用Redis)152
实际上:就是在SpringBoot中进行使用Redis
注:封装的是五类,对应的是Redis中的五种数据类型。
.yaml设置:
Redis默认提供了16个数据库。默认选择的是0号数据库。
如果需要修改的话,需要在对应的下面该文件进行修改处理。
RedisTemplate对象:
该对象也没有进行服务层的创建,是因为下面这个配置好之后,SpringBoot就会自动配置好这个对象。
实际操作:要选择.yaml中Redis配置好的对应的数据库号
是对RedisTemplate序列化之后: 查询得到的是1)中的内容
取消RedisTemplate的序列化操作,需要进行如下的处理:
添加下面一个类:类的信息如下所示:创造自己需要的方法对象redisTemplate,默认的是有序列化的功能实现。(对key的序列化器进行的改造)
4.3在Java中操作Redis 使用Sping Data Redis操作Redis 数据类型操作(对应五种数据类型在SpringBoot中的操作) 153-155
第二大部分。
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
/**
* 操作String类型数据
*/
@Test
public void testString(){
redisTemplate.opsForValue().set("city123","beijing");
String value = (String) redisTemplate.opsForValue().get("city123");
System.out.println(value);
redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);//设置延长时间,一段时间后内容会自动清空
Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
System.out.println(aBoolean);
}
/**
* 操作Hash类型数据
*/
@Test
public void testHash(){
HashOperations hashOperations = redisTemplate.opsForHash();
//存值
hashOperations.put("002","name","xiaoming");
hashOperations.put("002","age","20");
hashOperations.put("002","address","bj");
//取值
String age = (String) hashOperations.get("002", "age");
System.out.println(age);
//获得hash结构中的所有字段
Set keys = hashOperations.keys("002");
for (Object key : keys) {
System.out.println(key);
}
//获得hash结构中的所有值
List values = hashOperations.values("002");
for (Object value : values) {
System.out.println(value);
}
}
/**
* 操作List类型的数据
*/
@Test
public void testList(){
ListOperations listOperations = redisTemplate.opsForList();
//存值
listOperations.leftPush("mylist","a");
listOperations.leftPushAll("mylist","b","c","d");
//取值
List<String> mylist = listOperations.range("mylist", 0, -1);
for (String value : mylist) {
System.out.println(value);
}
//获得列表长度 llen
Long size = listOperations.size("mylist");
int lSize = size.intValue();
for (int i = 0; i < lSize; i++) {
//出队列
String element = (String) listOperations.rightPop("mylist");
System.out.println(element);
}
}
/**
* 操作Set类型的数据
*/
@Test
public void testSet(){
SetOperations setOperations = redisTemplate.opsForSet();
//存值
setOperations.add("myset","a","b","c","a");
//取值
Set<String> myset = setOperations.members("myset");
for (String o : myset) {
System.out.println(o);
}
//删除成员
setOperations.remove("myset","a","b");
//取值
myset = setOperations.members("myset");
for (String o : myset) {
System.out.println(o);
}
}
/**
* 操作ZSet类型的数据
*/
@Test
public void testZset(){
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//存值
zSetOperations.add("myZset","a",10.0);
zSetOperations.add("myZset","b",11.0);
zSetOperations.add("myZset","c",12.0);
zSetOperations.add("myZset","a",13.0);
//取值
Set<String> myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//修改分数
zSetOperations.incrementScore("myZset","b",20.0);
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
//删除成员
zSetOperations.remove("myZset","a","b");
//取值
myZset = zSetOperations.range("myZset", 0, -1);
for (String s : myZset) {
System.out.println(s);
}
}
/**
* 通用操作,针对不同的数据类型都可以操作
*/
@Test
public void testCommon(){
//获取Redis中所有的key
Set<String> keys = redisTemplate.keys("*");
for (String key : keys) {
System.out.println(key);
}
//判断某个key是否存在
Boolean itcast = redisTemplate.hasKey("itcast");
System.out.println(itcast);
//删除指定key
redisTemplate.delete("myZset");
//获取指定key对应的value的数据类型
DataType dataType = redisTemplate.type("myset");
System.out.println(dataType.name());
}