数据库相关——redis

文章目录

    • 1. Jedis
      • 1.1 常用命令
      • 1.2 可以参考的代码
    • 2 缓存穿透
    • 3 windows cmd下redis
    • 4 python thrift 连接Hbase
      • 4.1 thrift
      • 4.2 参考文章:

1. Jedis

1.1 常用命令

转载:https://www.cnblogs.com/leskang/p/7840603.html
这里只记录我用到的命令,并没有实际操作每个命令

public class JedisTest_csdn {
    public static void test(){
        //创建Jedis对象,需要指定连接和端口
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        // string操作:
        jedis.set("key1", "value1");
        System.out.println("string操作:" + jedis.get("key1"));

        // list操作, rpush, push, lpop, rpop
        jedis.rpush("list1", "a", "b", "c");
        System.out.println("list1:" + jedis.lrange("list1", 0, -1));
        System.out.println("lpop:" + jedis.lpop("list1"));
        System.out.println("list1:" + jedis.lrange("list1", 0, -1));
        System.out.println("rpop:" + jedis.rpop("list1"));
        System.out.println("list1:" + jedis.lrange("list1", 0, -1));
    }

    public static void main(String[] args) {
        test();
    }
}

result:
string操作:value1
list1:[a, b, c]
lpop:a
list1:[b, c]
rpop:c
list1:[b]

还有其他的命令,比如hash, 命令是普通命令+"h"开头,:
比如,jedis.set(key, value)
变为:jedis.hset(key, value)

1.2 可以参考的代码

Java中使用Jedis操作Redis(Maven导入包)、创建Redis连接池:
https://blog.csdn.net/qq_26525215/article/details/60466222
里面有简单的代码

2 缓存穿透

缓存击穿,缓存雪崩
https://www.bilibili.com/video/BV1CT4y1g7rd
一个80分钟的视频公开课,对缓存穿透以及布隆过滤讲的比较清楚,
redis在一定程度上,充当数据库的缓存

3 windows cmd下redis

打开一个cmd,运行server端:redis-server.exe
再打开一个cmd,运行客户端:redis-cli.exe -h 127.0.0.1 -p 6379
然后在客户端下执行命令:
set name ‘jack’
get name
数据库相关——redis_第1张图片

数据库相关——redis_第2张图片

4 python thrift 连接Hbase

4.1 thrift

Thrift是一个客户端和服务端的架构体系,数据通过socket传输;
具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports);

  • 传输协议:
    TBase
    TBinaryProtocol
    TCompactProtocol
    TJSONProtocol
    TProtocol
    TProtocolDecorator
    fastbinary
  • 传输标准:
    TTransport,
    TSocket,-使用堵塞式I/O进行传输,也是最常见的模式
    THttpClient,
    TZlibTransport-使用执行zlib压缩,不提供Java的实现。
from thrift.transport import TTransport,TSocket,THttpClient,TZlibTransport
from thrift.protocol import TBase, fastbinary, TBinaryProtocol, TCompactProtocol, TJSONProtocol, TProtocol,TProtocolDecorator

报错:thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
刚开始的代码:

from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol, TCompactProtocol

#server端地址和端口,web是HMaster也就是thriftServer主机名,thriftServer默认端口是9090
socket = TSocket.TSocket('xx.xx.xx.xx', xxxx)
#设置传输方式(TFramedTransport或TBufferedTransport)
transport = TTransport.TBufferedTransport(socket)
#设置传输协议,缺省简单的二进制序列化协议
protocol = TBinaryProtocol.TBinaryProtocol(transport)
报错:thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
改正后:
transport = TTransport.TFramedTransport(socket)
#设置传输协议,缺省高效的二进制序列化协议
protocol = TCompactProtocol.TCompactProtocol(transport)
client = Hbase.Client(protocol)
transport.open()
print(client.getTableNames())

原因是:是因为thrift 的server端和client端的协议不匹配造成的,而server端的thrift采用的是framed+compact模式。
可能是下面的配置:

hbase.regionserver.thrift.compact=True
hbase.regionserver.thrift.framed=True

数据库相关——redis_第3张图片

  • client/server
    对于client来说,该层是比较简单的client的业务逻辑代码,而对于server来说,有提供的几种模式的server。
  • Thrift的Protocol层
    对于RPC来说需要能正确的传输调用的信息已经返回的结果,那么protocol层则主要负责序列化和反序列化,该层主要有以下几种,对于Binary来说,那么使用的是Binary的方式来进行序列化,那么会涉及到一定的协议格式,对于JSON来说,使用的则是以JSON的方式序列化。
  • Thrift的Transport层
    由于RPC是一种特殊的网络编程,那么需要封装一层传输层来支持底层的网络通信,而Transport则负责这层。Transport层不仅仅用来支持底层的网络通信,它可能还会对Protocol层的数据进一步分装。比如针对Framed类型来说,该层还会多4个字节的字段用来存储Protocol层的字节串长度。
    数据库相关——redis_第4张图片

4.2 参考文章:

  1. https://blog.csdn.net/a200822146085/article/details/90379253
  2. https://zhuanlan.zhihu.com/p/85036019
    报错:except IOError, io 解决方法
  3. https://blog.csdn.net/zhouhao118118/article/details/93485212

你可能感兴趣的:(Redis)