Redis学习笔记
目录
1.1 Redis简介
1.2 主要特点:
1.3redis 的windows安装后
1.4 修改Redis配置文件
二.redis常用数据类型
三、redis常用命令
1、字符串操作命令
2、哈希操作命令
3、列表操作命令
4、集合操作命令
5、有序集合操作命令
6、redis通用命令
四、再java中使用redis
一. redis前言
1.1 Redis简介
Redis是一个基于**内存**的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的**存储中间件**。
1.2 主要特点:
- 基于内存存储,读写性能高
- 适合存储热点数据(热点商品、资讯、新闻)
- 企业应用广泛
1.3redis 的windows安装后
1.4 修改Redis配置文件
设置Redis服务密码,修改redis.windows.conf
打开配置文件修改
requirepass 123456
重启Redis后,再次连接Redis时,需加上密码,否则连接失败。
h 标识你要在哪里链接 , -p 端口号 -a 密码
redis-cli.exe -h localhost -p 6379 -a 123456
二.redis常用数据类型
三、redis常用命令
1、字符串操作命令
2、哈希操作命令
3、列表操作命令
4、集合操作命令
5、有序集合操作命令
6、redis通用命令
四、再java中使用redis
3.配置类
@Configuration
@Slf4j
public class RedisConfiguration { //redis的配置类
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("开始创建redis的模板对象... ");
RedisTemplate redisTemplate = new RedisTemplate();
//设置redis的链接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置redis key 的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
4。测试方法
@SpringBootTest
public class RedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedis(){
System.out.println(redisTemplate);
//string数据操作
ValueOperations valueOperations = redisTemplate.opsForValue();
//hash类型的数据操作
HashOperations hashOperations = redisTemplate.opsForHash();
//list类型的数据操作
ListOperations listOperations = redisTemplate.opsForList();
//set类型数据操作
SetOperations setOperations = redisTemplate.opsForSet();
//zset类型数据操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
}
测试再java当中操作redis
**1). 操作字符串类型数据** ,其他的操作命令也类似,就是使用的对象不同,命令和我们再客户端使用的命令一样
```java
/**
* 操作字符串类型的数据
*/
@Test
public void testString(){
// set get setex setnx
redisTemplate.opsForValue().set("name","小明");
String city = (String) redisTemplate.opsForValue().get("name");
System.out.println(city);
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);
redisTemplate.opsForValue().setIfAbsent("lock","1");
redisTemplate.opsForValue().setIfAbsent("lock","2");
}
```
五、HttpClient
1、get请求
/**
* 测试通过httpclient发送GET方式的请求
*/
@Test
public void testGet() throws IOException {
//创建httpClientTest
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");
//发送请求
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取响应状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("请求状态码:"+ statusCode);
//获取返回的数据
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity);
System.out.println("服务端返回的数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}
2、post请求
/**
* 测试通过httpclient发送GET方式的请求
*/
@Test
public void testPost() throws Exception{
//获取HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpPost httpPost =new HttpPost("http://localhost:8080/admin/employee/login");
JSONObject jsonObject = new JSONObject();
jsonObject.put("username","admin");
jsonObject.put("password","123456");
StringEntity entity = new StringEntity(jsonObject.toString());
//指定请求编码方式
entity.setContentEncoding("utf-8");
//数据格式
entity.setContentType("application/json");
httpPost.setEntity(entity);
//发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//解析返回结果
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应码为:" + statusCode);
HttpEntity entity1 = response.getEntity();
String body = EntityUtils.toString(entity1);
System.out.println("响应数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}
六、微信小程序开发
**步骤分析:**
1. 小程序端,调用wx.login()获取code,就是授权码。
2. 小程序端,调用wx.request()发送请求并携带code,请求开发者服务器(自己编写的后端服务)。
3. 开发者服务端,通过HttpClient向微信接口服务发送请求,并携带appId+appsecret+code三个参数。
4. 开发者服务端,接收微信接口服务返回的数据,session_key+opendId等。opendId是微信用户的唯一标识。
5. 开发者服务端,自定义登录态,生成令牌(token)和openid等数据返回给小程序端,方便后绪请求身份校验。
6. 小程序端,收到自定义登录态,存储storage。
7. 小程序端,后绪通过wx.request()发起业务请求时,携带token。
8. 开发者服务端,收到请求后,通过携带的token,解析当前登录用户的id。
9. 开发者服务端,身份校验通过后,继续相关的业务逻辑处理,最终返回业务数据。
七、spring-task
1、Spring Task** 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。
2、spring task_cron表达式
*cron表达式**其实就是一个字符串,通过cron表达式可以**定义任务触发的时间**
秒、分钟、小时、日、月、周、年(可选)
例子::2022年10月12日上午9点整 对应的cron表达式为:**0 0 9 12 10 ? 2022**
八、 WebSocket
WebSocket 是基于 TCP 的一种新的**网络协议**。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,
两者之间就可以创建**持久性**的连接, 并进行**双向**数据传输。
项目依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
WebSocket服务
package com.sky.WebSocket;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* WebSocket服务
*/
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {
//存放会话对象
private static Map<String, Session> sessionMap = new HashMap();
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session, @PathParam("sid") String sid) {
System.out.println("客户端:" + sid + "建立连接");
sessionMap.put(sid, session);
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
*/
@OnMessage
public void onMessage(String message, @PathParam("sid") String sid) {
System.out.println("收到来自客户端:" + sid + "的信息:" + message);
}
/**
* 连接关闭调用的方法
*
* @param sid
*/
@OnClose
public void onClose(@PathParam("sid") String sid) {
System.out.println("连接断开:" + sid);
sessionMap.remove(sid);
}
/**
* 群发
*
* @param message
*/
public void sendToAllClient(String message) {
Collection<Session> sessions = sessionMap.values();
for (Session session : sessions) {
try {
//服务器向客户端发送消息
session.getBasicRemote().sendText(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
使用这个还需要配置(websocket配置类)
package com.sky.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* WebSocket配置类,用于注册WebSocket的Bean
*/
@Configuration
public class WebSocketConfiguration {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
CSDN-Ada助手: 恭喜你写了第8篇博客!学习jQuery确实是一件不容易的事情,但你已经做得非常好了。我建议你可以考虑写一些实际应用的案例,或者分享一些解决实际问题的经验,这样可以让读者更加深入地理解jQuery的使用。希望你能继续保持创作的热情,加油!
CSDN-Ada助手: 恭喜您写下了第7篇博客,标题为“heima头条学习笔记”!您的持续创作真是令人赞叹。通过您的学习笔记,我们得以深入了解heima头条的知识,受益匪浅。不过,我谦虚地提出一些建议:在下一篇博客中,您可以考虑分享一些关于heima头条的实践经验或者探索其中的一些挑战与解决方案。这样的创作将进一步丰富我们对于该主题的了解。期待您的下一篇博客!
CSDN-Ada助手: 恭喜您撰写了第6篇博客!标题为“springcloud学习笔记”,我很高兴看到您对这个主题的深入研究。您的博客内容一定为读者提供了很多有价值的学习笔记。接下来,我建议您继续在这个主题上深入探索,可以尝试分享一些实践经验或者案例分析,这将进一步丰富读者的知识。谦虚的语气能够让读者更加喜欢并尊重您的观点,期待您的下一篇创作!
CSDN-Ada助手: 非常感谢您分享关于Spring的博客!您的文章标题“spring笔记”非常吸引人,摘要中的内容也很有用。鼓励您继续创作,分享更多关于Spring的知识。 除了您提到的配置仓库和获取Spring容器中的bean对象的技巧,还有一些与Spring相关的扩展知识和技能。例如,您可以深入研究Spring的注解配置,如@Autowired和@Component等,来更方便地管理和使用bean对象。另外,了解如何使用Spring的AOP(面向切面编程)来实现横切关注点的功能,可以提高代码的可维护性和复用性。此外,掌握使用Spring Boot来简化项目的配置和启动过程也是很有价值的技能。 希望这些扩展知识和技能对您的博客创作有所帮助!再次感谢您的分享,期待您的下一篇博客! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2
CSDN-Ada助手: 恭喜您完成了第5篇博客《Redis学习笔记》!持续创作博客是一项了不起的成就,能够分享自己的学习心得真是令人钦佩。通过您的博客,我深入了解了Redis的学习内容,受益匪浅。 在下一步的创作中,我建议您可以进一步探索Redis的高级应用和实际案例。对于读者来说,了解如何在实际项目中应用Redis将会非常有帮助。当然,这只是我谦虚的建议,您对于自己的创作方向肯定有更好的想法。期待您继续分享更多精彩的博客,不断提升自己的技术水平!