redis学习

数据类型

String(字符串):

SET,GET
在这里插入图片描述

其他关于string命令

GETRANGE key start end 返回 key 中字符串值的子字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

在这里插入图片描述

GETBIT key offset
对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
在这里插入图片描述

MGET key1 [key2…]
获取所有(一个或多个)给定 key 的值。
在这里插入图片描述
SETBIT key offset value
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
在这里插入图片描述

SETEX key seconds value
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。
在这里插入图片描述

SETNX key value
只有在 key 不存在时设置 key 的值。

SETRANGE key offset value
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。
在这里插入图片描述

STRLEN key
返回 key 所储存的字符串值的长度。
在这里插入图片描述

MSET key value [key value …]
同时设置一个或多个 key-value 对。

MSETNX key value [key value …]
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

INCR key
将 key 中储存的数字值增一。

INCRBY key increment
将 key 所储存的值加上给定的增量值(increment) 。

INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment) 。

DECR key
将 key 中储存的数字值减一。

DECRBY key decrement
key 所储存的值减去给定的减量值(decrement) 。

APPEND key value
如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
在这里插入图片描述

Hash(哈希):适合存储对象

HMSET,HGET,HGETALL
在这里插入图片描述
在这里插入图片描述
其他哈希操作命令:
在这里插入图片描述
在这里插入图片描述

对于HSCAN命令:

在这里插入图片描述

List (列表) 可重复,有序 :

lpush,lrange
在这里插入图片描述

其他list命令操作:
在这里插入图片描述
在这里插入图片描述

Set(集合)无重复无序:

sadd,smenbers
在这里插入图片描述

其他set命令:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

zset(有序集合)无重复有序:

zadd,zrangebyscore
按照默认顺序排序,score一样是为0
在这里插入图片描述

按照score顺序:
在这里插入图片描述

其他命令关于zset:
在这里插入图片描述
关于ZINTERSTORE destination numkeys key [key …]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 destination 中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

redis key

与rediskey相关的命令:https://redis.io/commands
在这里插入图片描述
在这里插入图片描述

Redis HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
只会计算不会存储
在这里插入图片描述

发布订阅模式

客户端订阅:
在这里插入图片描述

发布:
在这里插入图片描述

示例:订阅chat频道,publish通过chat发布,两个订阅chat的客户端接收到消息
在这里插入图片描述
在这里插入图片描述

发布订阅的命令:
在这里插入图片描述

redis事务

MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:
在这里插入图片描述

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
相关命令:
在这里插入图片描述

redis脚本在这里插入图片描述

常用命令:
在这里插入图片描述

redis连接命令

在这里插入图片描述

redis服务器命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

redis stream

Redis Stream 主要用于消息队列(MQ,Message Queue)
Redis 发布订阅 (pub/sub) 消息无法持久化
Redis Stream 提供了消息的持久化和主备复制功能
Redis Stream 的结构如下所示,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容:
在这里插入图片描述
每个 Stream 都有唯一的名称,它就是 Redis 的 key,在我们首次使用 xadd 指令追加消息时自动创建。
上图解析:
Consumer Group :消费组,使用 XGROUP CREATE 命令创建,一个消费组有多个消费者(Consumer)。
last_delivered_id :游标,每个消费组会有个游标 last_delivered_id,任意一个消费者读取了消息都会使游标 last_delivered_id 往前移动。
pending_ids :消费者(Consumer)的状态变量,作用是维护消费者的未确认的 id。 pending_ids 记录了当前已经被客户端读取的消息,但是还没有 ack (Acknowledge character:确认字符)。
相关命令:
在这里插入图片描述

Redis 数据备份与恢复

一些命令:SAVE,config get dir,bgsave

redis安全

config get requirepass
在这里插入图片描述

config set requirepass "密码"
在这里插入图片描述

连接redis需要密码,命令:
auth "密码"

在这里插入图片描述

Redis 性能测试

在这里插入图片描述

在redis目录下执行
以下实例同时执行 10000 个请求来检测性能:
在这里插入图片描述

以下实例同时执行 1000 个请求来检测性能:
在这里插入图片描述

redis 性能测试工具可选参数如下所示:
在这里插入图片描述

多个参数来测试 redis 性能:
在这里插入图片描述

客户端连接

redis客户端连接就相当于开了几个窗口
原理:
Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:
首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送
获取最大连接数:config get maxclients,可以在redis.conf文件修改
设置最大连接数:redis-server --maxclients 100000
客户端命令
在这里插入图片描述

Java使用redis

使用驱动连接
将jar包放到工程中
连接:https://static.runoob.com/download/jedis-2.9.0.jar 下载驱动,最好是这个版本,下载最新版容易出现有一个s开头的jar包找不到的情况。

import redis.clients.jedis.Jedis;
 
public class RedisJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        // 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
        // jedis.auth("123456"); 
        System.out.println("连接成功");
        //查看服务是否运行
        System.out.println("服务正在运行: "+jedis.ping());
    }
}

字符串:

import redis.clients.jedis.Jedis;
 
public class RedisStringJava {
    public static void main(String[] args) {
        //连接本地的 Redis 服务
        Jedis jedis = new Jedis("localhost");
        System.out.println("连接成功");
        //设置 redis 字符串数据
        jedis.set("runoobkey", "www.runoob.com");
        // 获取存储的数据并输出
        System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
    }
}

到这里算告一段落。