首页 » PHP教程 » phpredisaddserver技巧_Spring全家桶系列–SpringBoot入门Redis

phpredisaddserver技巧_Spring全家桶系列–SpringBoot入门Redis

访客 2024-12-03 0

扫一扫用手机浏览

文章目录 [+]

Redis是一个开源的,基于内存的键值数据存储,用作数据库,缓存和代理。
在实现方面,Key-Value存储代表NoSQL空间中最大和最老的成员之一。
Redis支持数据构造,如字符串,散列,列表,集和带范围查询的有序集。

在spring data redis的框架,可以很随意马虎地编写,通过供应一个抽象的数据存储利用Redis的键值存储的Spring运用程序。
非关系型数据库,基于内存,存取数据的速率不是关系型数据库所能比拟的 redis是键值对(key-value)的数据库

phpredisaddserver技巧_Spring全家桶系列–SpringBoot入门Redis phpredisaddserver技巧_Spring全家桶系列–SpringBoot入门Redis PHP教程

有5中紧张数据类型:

phpredisaddserver技巧_Spring全家桶系列–SpringBoot入门Redis phpredisaddserver技巧_Spring全家桶系列–SpringBoot入门Redis PHP教程
(图片来自网络侵删)
字符串类型 string散列类型 hash列表类型 list凑集类型 set有序凑集类型 zset

redis缓存为啥速率快

这么说吧,别人问你什么是“redis”,如果你知道,你可以直接吧啦吧啦一大堆,实在这个时候你的大脑就类似redis缓存,别人问的“redis”便是key,你说出来的结果便是value,而你如果不知道,你就去上网查,然后再见告别人,这就类似于查询数据库了,你查了再见告别人当然慢了!

你把脑袋里的东西写进条记就类似redis持久化保存了;

你过了两个月把这玩意忘了,便是redis的定期删除了;

引自:https://blog.csdn.net/angleflyyy/article/details/81627785

准备事情

项目工具环境:

IDEA 2018.2Gradle 4+JDK1.8以上redis做事器

设置Redis做事器

redis下载地址:https://redis.io/download

如果你的电脑是Mac:

brew install redis

然后运行redis做事器

初始化项目

现在去Spring开始界面初始化一个项目

这里选择的是Gradle,选择完成点击Generate Projrct天生项目,这个时候会自动下载一个压缩包给你,解压过后导入,导入IDEA教程:http://note.youdao.com/noteshare?id=74e2d65e2d22cd684c3fdd6695b3ecdf

Gradle 依赖管理

让我们在build.gradle中为我们正在构建的示例运用程序声明必要的依赖项

buildscript { repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } } dependencies { classpath(\"大众org.springframework.boot:spring-boot-gradle-plugin:2.1.0.RELEASE\"大众) }} apply plugin: 'java-library'apply plugin: 'org.springframework.boot'apply plugin: 'io.spring.dependency-management' group = 'com.example'version = '0.0.1-SNAPSHOT'sourceCompatibility = 1.8 repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }} dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'mysql:mysql-connector-java' implementation 'org.projectlombok:lombok' implementation 'org.apache.commons:commons-pool2:2.4.2' implementation 'com.alibaba:fastjson:1.2.51' testImplementation 'org.springframework.boot:spring-boot-starter-test'}

开始利用

凭借着SpringBoot的开箱即用的特点,集成Redis也不例外

redisTemplate.opsForValue();//操作字符串redisTemplate.opsForHash();//操作hashredisTemplate.opsForList();//操作listredisTemplate.opsForSet();//操作setredisTemplate.opsForZSet();//操作有序set

在Spring的测试类中开始利用:

redisTemplate.opsForValue().set(\公众username\公众,\"大众test\"大众);

实行过后创造存在redis中的数据:

是乱的,是由于在set后redis会序列化key和value,以是我们要在config中重写一下redisTemplate

src/main/java/com/example/springbootredisdemo/config/RedisConfig.java

package com.example.springbootredisdemo.config; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.GenericToStringSerializer;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer; @Configurationpublic class RedisConfig { private final RedisTemplate redisTemplate; @Autowired public RedisConfig(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } @Bean @SuppressWarnings(\"大众unchecked\"大众) public RedisTemplate<String, Object> redisTemplate() { RedisSerializer<String> stringSerializer = new StringRedisSerializer(); RedisSerializer<Object> jsonString = new GenericToStringSerializer<>(Object.class); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setValueSerializer(jsonString); redisTemplate.setHashKeySerializer(stringSerializer); redisTemplate.setHashValueSerializer(jsonString); return redisTemplate; } }

再去实行一下刚刚的方法

经由自定义的序列化之后可以了,没有乱码了

opsForList()添加操作

@Test public void CsetListRedis(){ List<String> trap = new ArrayList<>(); trap.add(\"大众张三\"大众); trap.add(\"大众张无忌\"大众); trap.add(\公众新垣结衣\"大众); //循环向userlist左添加值 trap.forEach(value->redisTemplate.opsForList().leftPush(\"大众userlist\"大众,value)); //向userlist右添加值 redisTemplate.opsForList().rightPush(\公众userlist\"大众,\公众rightValue\"大众); log.info(\"大众userlist->{}\公众,redisTemplate.opsForList().range(\"大众userlist\"大众,0,10)); }

opsForList()删除操作

@Test public void DlistRedisRemove(){ redisTemplate.opsForList().remove(\"大众userlist\公众,0,\"大众张无忌\公众); }

通过源码看这里有三个参数:

key 对应的是redis中存的key值count 正数便是从左边开始删除 负数是从右面 例如-1就从右删除第一个值为value的,0代表删除全部值为value的value 便是须要从list移除的值

opsForSet()添加操作

利用了set值的不可重复

@Test public void CsetRedis(){ List<String> trap = new ArrayList<>(); trap.add(\"大众张三\公众); trap.add(\公众里斯\"大众); trap.add(\公众里斯\公众); trap.add(\公众张无忌\"大众); trap.add(\"大众新垣结衣\"大众); System.out.print(trap.toString()); //循环向userlist左添加值 trap.forEach(value->redisTemplate.opsForSet().add(\公众userSet\"大众,value)); log.info(\"大众取出userSet->{}\"大众,redisTemplate.opsForSet().members(\公众userSet\公众)); }

结果

符合了Set凑集的无序和不可重复性

opsForSet()的删除操作

这个删除操作就比较随意马虎了,直接根据set的key值,后面参数写其须要删除的value就可以

@Test public void EsetRedisRemove(){ redisTemplate.opsForSet().remove(\"大众userSet\"大众,\公众张无忌\"大众); }

opsForHash()操作

//opsForHash()操作 @Test public void FhashRedisAdd(){ //添加 redisTemplate.opsForHash().put(\"大众user\"大众,\"大众phone\公众,10086); redisTemplate.opsForHash().put(\"大众user\"大众,\公众address\"大众,\"大众Shanghai\"大众); redisTemplate.opsForHash().put(\公众user\公众,\"大众del\"大众,\公众mubaba\"大众); redisTemplate.opsForHash().put(\公众user\"大众,\"大众dada\"大众,\"大众达达\"大众); //修正 redisTemplate.opsForHash().put(\"大众user\"大众,\公众address\"大众,\"大众Beijing\"大众); //删除 redisTemplate.opsForHash().delete(\"大众user\"大众,\公众del\"大众,\"大众dada\公众); }

结果

测试类SpringbootRedisDemoApplicationTests

src/test/java/com/example/springbootredisdemo/SpringbootRedisDemoApplicationTests.java

package com.example.springbootredisdemo; import com.example.springbootredisdemo.service.NovelService;import lombok.extern.slf4j.Slf4j;import org.junit.FixMethodOrder;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.MethodSorters;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList;import java.util.List; //根据测试方法名字搞定实行顺序@FixMethodOrder(MethodSorters.NAME_ASCENDING)@RunWith(SpringRunner.class)@SpringBootTest@Slf4jpublic class SpringbootRedisDemoApplicationTests { @Autowired private NovelService novelService; @Autowired private RedisTemplate<String,Object> redisTemplate; private final static String KEY = \公众username\"大众; private final static String VALUE = \"大众test\"大众; @Test public void AstringRedis(){ redisTemplate.opsForValue().set(KEY,VALUE); log.info(\公众string set存储:{}->{}\公众,KEY,VALUE); redisTemplate.opsForValue().get(KEY); log.info(\公众string 根据{}取出{}\"大众,KEY,VALUE); } @Test public void BlistRedis(){ List<String> trap = new ArrayList<>(); trap.add(\"大众张三\"大众); trap.add(\"大众张三\"大众); trap.add(\公众张无忌\公众); trap.add(\公众新垣结衣\"大众); //循环向userlist左添加值 trap.forEach(value->redisTemplate.opsForList().leftPush(\"大众userlist\公众,value));// redisTemplate.opsForList().leftPushAll(\"大众userlist\"大众,trap); //向userlist右添加值 redisTemplate.opsForList().rightPush(\"大众userlist\"大众,\公众rightValue\"大众); //取出userlist的值 log.info(\"大众userlist->{}\"大众,redisTemplate.opsForList().range(\"大众userlist\"大众,0,10)); } @Test public void CsetRedis(){ List<String> trap = new ArrayList<>(); trap.add(\公众张三\"大众); trap.add(\公众里斯\公众); trap.add(\公众里斯\公众); trap.add(\"大众张无忌\公众); trap.add(\公众新垣结衣\公众); System.out.print(trap.toString()); //循环向userlist左添加值 trap.forEach(value->redisTemplate.opsForSet().add(\"大众userSet\"大众,value)); log.info(\"大众取出userSet->{}\公众,redisTemplate.opsForSet().members(\公众userSet\"大众)); } @Test public void DlistRedisRemove(){ redisTemplate.opsForList().remove(\"大众userlist\"大众,0,\公众张无忌\"大众); } @Test public void EsetRedisRemove(){ redisTemplate.opsForSet().remove(\"大众userSet\"大众,\"大众张无忌\公众); } //opsForHash()操作 @Test public void FhashRedisAdd(){ //添加 redisTemplate.opsForHash().put(\"大众user\公众,\"大众phone\公众,10086); redisTemplate.opsForHash().put(\公众user\"大众,\"大众address\公众,\"大众Shanghai\"大众); redisTemplate.opsForHash().put(\"大众user\"大众,\"大众del\"大众,\"大众mubaba\公众); redisTemplate.opsForHash().put(\"大众user\公众,\公众dada\"大众,\"大众达达\"大众); //修正 redisTemplate.opsForHash().put(\"大众user\公众,\"大众address\公众,\"大众Beijing\"大众); //删除 redisTemplate.opsForHash().delete(\"大众user\"大众,\"大众del\"大众,\"大众dada\"大众); }}

小知识

方法名字前加ABCD...是为了让方法有实行顺序,根据测试方法名字搞定实行顺序,在方法上加表明 @FixMethodOrder(MethodSorters.NAME_ASCENDING)

日志表明@Slf4j是为了让日志书写更方便

//之前写日志 log.info(\公众输出a\"大众+index+\"大众b\"大众); //现在 log.info(\"大众输出a{}b\"大众,index);

多个参数可以用多个{},总之,喜好哪个用哪个,感激!

码云代码地址

https://gitee.com/cuifuan/SpringBoot

相关文章