当前位置: 首页 > news >正文

redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。

大家如果对使用netty搞这些http请求什么的感兴趣的,可以参观我自己创建的这个项目。

nanshaws/nettyWeb: 复习一下netty,并打算做一个web项目出来 (github.com)

Redis的基本命令包括:

  1. SET key value:设置指定key的值。

  2. GET key:获取指定key的值。

  3. DEL key:删除指定key。

  4. EXISTS key:检查指定key是否存在。

  5. TTL key:获取指定key的过期时间。

  6. KEYS pattern:查找所有符合指定模式的key。

  7. INCR key:将指定key的值增加1。

  8. DECR key:将指定key的值减少1。

  9. LPUSH key value:将值添加到列表的左侧。

  10. RPUSH key value:将值添加到列表的右侧。

  11. LPOP key:移除并返回列表左侧的值。

  12. RPOP key:移除并返回列表右侧的值。

  13. SADD key member:将成员添加到集合中。

  14. SMEMBERS key:获取集合中的所有成员。

  15. ZADD key score member:将成员添加到有序集合中。

  16. ZRANGE key start stop:按照分数从小到大的顺序获取有序集合中指定范围的成员。

  17. HSET key field value:将哈希表中指定字段的值设置为指定值。

  18. HGET key field:获取哈希表中指定字段的值。

  19. HMGET key field1 [field2]:获取哈希表中指定字段的值列表。

  20. PING:测试Redis服务器是否可用。

用netty操作redis

引入依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.tianfan</groupId><artifactId>nettyTestLearn</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>io.netty</groupId><artifactId>netty-transport-native-epoll</artifactId><version>4.1.70.Final</version></dependency><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.86.Final</version></dependency><dependency><groupId>jakarta.activation</groupId><artifactId>jakarta.activation-api</artifactId><version>2.1.2</version></dependency><dependency><groupId>org.eclipse.angus</groupId><artifactId>angus-mail</artifactId><version>1.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.10</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><!--        json--><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version></dependency></dependencies></project>

完整代码:

package org.tianfan.example;import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.util.concurrent.GenericFutureListener;import java.io.BufferedReader;
import java.io.InputStreamReader;public class RedisClient {String host;    //   目标主机int port;       //   目标主机端口public RedisClient(String host,int port){this.host = host;this.port = port;}public void start() throws Exception{EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap bootstrap = new Bootstrap();bootstrap.group(group).channel(NioSocketChannel.class).handler(new RedisClientInitializer());Channel channel = bootstrap.connect(host, port).sync().channel();System.out.println(" connected to host : " + host + ", port : " + port);System.out.println(" type redis's command to communicate with redis-server or type 'quit' to shutdown ");BufferedReader in = new BufferedReader(new InputStreamReader(System.in));ChannelFuture lastWriteFuture = null;for (;;) {String s = in.readLine();if(s.equalsIgnoreCase("quit")) {break;}System.out.print(">");lastWriteFuture = channel.writeAndFlush(s);lastWriteFuture.addListener(new GenericFutureListener<ChannelFuture>() {@Overridepublic void operationComplete(ChannelFuture future) throws Exception {if (!future.isSuccess()) {System.err.print("write failed: ");future.cause().printStackTrace(System.err);}}});}if (lastWriteFuture != null) {lastWriteFuture.sync();}System.out.println(" bye ");}finally {group.shutdownGracefully();}}public static void main(String[] args) throws Exception{RedisClient client = new RedisClient("192.168.56.10",6379);client.start();}}
package org.tianfan.example;import io.netty.buffer.ByteBufUtil;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import io.netty.handler.codec.CodecException;
import io.netty.handler.codec.redis.*;
import io.netty.util.CharsetUtil;
import io.netty.util.ReferenceCountUtil;import java.util.ArrayList;
import java.util.List;public class RedisClientHandler extends ChannelDuplexHandler {// 发送 redis 命令@Overridepublic void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {String[] commands = ((String) msg).split("\\s+");List<RedisMessage> children = new ArrayList<>(commands.length);for (String cmdString : commands) {children.add(new FullBulkStringRedisMessage(ByteBufUtil.writeUtf8(ctx.alloc(), cmdString)));}RedisMessage request = new ArrayRedisMessage(children);ctx.write(request, promise);}// 接收 redis 响应数据@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) {RedisMessage redisMessage = (RedisMessage) msg;// 打印响应消息printAggregatedRedisResponse(redisMessage);// 是否资源ReferenceCountUtil.release(redisMessage);}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {System.err.print("exceptionCaught: ");cause.printStackTrace(System.err);ctx.close();}private static void printAggregatedRedisResponse(RedisMessage msg) {if (msg instanceof SimpleStringRedisMessage) {System.out.println(((SimpleStringRedisMessage) msg).content());} else if (msg instanceof ErrorRedisMessage) {System.out.println(((ErrorRedisMessage) msg).content());} else if (msg instanceof IntegerRedisMessage) {System.out.println(((IntegerRedisMessage) msg).value());} else if (msg instanceof FullBulkStringRedisMessage) {System.out.println(getString((FullBulkStringRedisMessage) msg));} else if (msg instanceof ArrayRedisMessage) {for (RedisMessage child : ((ArrayRedisMessage) msg).children()) {printAggregatedRedisResponse(child);}} else {throw new CodecException("unknown message type: " + msg);}}private static String getString(FullBulkStringRedisMessage msg) {if (msg.isNull()) {return "(null)";}return msg.content().toString(CharsetUtil.UTF_8);}}
package org.tianfan.example;import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.handler.codec.redis.RedisArrayAggregator;
import io.netty.handler.codec.redis.RedisBulkStringAggregator;
import io.netty.handler.codec.redis.RedisDecoder;
import io.netty.handler.codec.redis.RedisEncoder;public class RedisClientInitializer extends ChannelInitializer<Channel> {@Overrideprotected void initChannel(Channel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();pipeline.addLast(new RedisDecoder());pipeline.addLast(new RedisBulkStringAggregator());pipeline.addLast(new RedisArrayAggregator());pipeline.addLast(new RedisEncoder());pipeline.addLast(new RedisClientHandler());}
}

 结果图:

http://www.lryc.cn/news/230721.html

相关文章:

  • 《白帽子讲web安全》笔记
  • unity UGUI无限循环滚动居中
  • 人工智能与新能源电动车的融合——技术创新引领未来交通革命
  • 交换机堆叠 配置(H3C)堆叠中一台故障如何替换
  • 2024年软考有哪些考试科目?具体考什么内容?
  • 2023.11.12 hive中分区表,分桶表与区别概念
  • Pass-中间件管理
  • 什么是GIL锁,有什么作用?python的垃圾回收机制是什么样的?解释为什么计算密集型用多进程,io密集型用多线程。
  • Postman如何发送Https请求
  • Redis集群启动
  • 使用proxy把后端返回的图片域名替换成目标域名
  • css实现div倾斜效果
  • 算法学习打卡day45|动态规划:股票问题总结
  • 内网环境下让容器上网,并制作一个httpd容器
  • 多个Obj模型合并
  • Qt调用python写好的函数,利用Python丰富的图像处理库来完成各种任务
  • 第六章:接口
  • 【Java 进阶篇】JQuery DOM操作:CRUD操作的前端魔法
  • 如何实现Redisson分布式锁
  • Kafka(三)生产者发送消息
  • 2020年五一杯数学建模C题饲料混合加工问题解题全过程文档及程序
  • 公益SRC实战|SQL注入漏洞攻略
  • Word软件手动安装Zotero插件
  • idea 插件推荐第二期
  • plsql查询中文出现乱码
  • 【Docker】五分钟完成Docker部署Java应用,你也可以的!!!
  • 如何准备2024年的系统设计面试?
  • 【开源】基于JAVA的电子元器件管理系统
  • 足底筋膜炎怎么治疗治愈
  • Keil工程忽略文件.gitignore、自动删除脚本:keilkilll.bat、自动生成目录文件列表脚本