Redis学习

2023-11-15

Redis简介

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

安装与配置

安装

在 Ubuntu 系统安装 Redis 可以使用以下命令:

# sudo apt update
# sudo apt install redis-server
启动 Redis
# redis-server
查看 redis 是否启动?
# redis-cli

以上命令将打开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上说明我们已经成功安装了redis。

Redis 配置

Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf,Ubuntu中的目录为 /etc/redis/redis.conf

你可以通过 CONFIG 命令查看或设置配置项。

Redis CONFIG 命令格式如下:

redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

example:

127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

使用 * 号获取所有配置项

修改配置

你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。

CONFIG SET 命令基本语法:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

example:

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

String(字符串)

string 是 redis 最基本的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。

example:

127.0.0.1:6379> set name 's1ng'
OK
127.0.0.1:6379> get name
"s1ng"

在以上实例中我们使用了 Redis 的 SETGET 命令。键为 name ,对应的值为 John。

**注意:**一个键最大能存储 512MB。

Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

example:

DEL runoob 用于删除前面测试用过的 key,不然会报错:(error) WRONGTYPE Operation against a key holding the wrong kind of value

127.0.0.1:6379> DEL runoob
(integer) 0
127.0.0.1:6379> hmset runoob field1 'hello' field2 's1ng'
OK
127.0.0.1:6379> hget runoob field1
"hello"
127.0.0.1:6379> hget runoob field2
"s1ng"

实例中我们使用了 Redis HMSET, HGET 命令,HMSET 设置了两个 field=>value 对, HGET 获取对应 field 对应的 value

List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

example:

127.0.0.1:6379> del runoob
(integer) 1
127.0.0.1:6379> lpush runoob who
(integer) 1
127.0.0.1:6379> lpush runoob are
(integer) 2
127.0.0.1:6379> lpush runoob you
(integer) 3
127.0.0.1:6379> lrange runoob 0 2
1) "you"
2) "are"
3) "who"
127.0.0.1:6379> lrange runoob 0 1
1) "you"
2) "are"
Set(集合)

Redis 的 Set 是 string 类型的无序集合。

  • sadd 命令

添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。

sadd key member

example:

127.0.0.1:6379> del runoob
(integer) 1
127.0.0.1:6379> sadd runoob i
(integer) 1
127.0.0.1:6379> sadd runoob am
(integer) 1
127.0.0.1:6379> sadd runoob hacker
(integer) 1
127.0.0.1:6379> sadd runoob hacker
(integer) 0
127.0.0.1:6379> smembers runoob
1) "hacker"
2) "am"
3) "i"

**注意:**以上实例中 hacker添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

  • zadd 命令

添加元素到集合,元素在集合中存在则更新对应score

zadd key score member 

example:

127.0.0.1:6379> del a
(integer) 0
127.0.0.1:6379> zadd a 0 who
(integer) 1
127.0.0.1:6379> zadd a 0 are
(integer) 1
127.0.0.1:6379> zadd a 0 you
(integer) 1
127.0.0.1:6379> zadd a 0 you
(integer) 0
127.0.0.1:6379> ZRANGEBYSCORE a 0 10
1) "are"
2) "who"
3) "you"

Redis 命令

在远程服务上执行命令

如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。

$ redis-cli -h host -p port -a password

example:

连接到主机为 127.0.0.1,端口为 6379 ,密码为mypass的 redis 服务上。

# redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
127.0.0.1:6379>

Redis 键(key)

Redis 键命令用于管理 redis 的键。

Redis 键命令的基本语法如下:

redis 127.0.0.1:6379> COMMAND KEY_NAME

example:

127.0.0.1:6379> SET runoobkey redis
OK
127.0.0.1:6379> DEL runoobkey
(integer) 1

在以上实例中 DEL 是一个命令, runoobkey 是一个键。 如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0

Redis 字符串(String)

Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:

redis 127.0.0.1:6379> COMMAND KEY_NAME

example:

redis 127.0.0.1:6379> SET runoobkey redis
OK
redis 127.0.0.1:6379> GET runoobkey
"redis"

在以上实例中我们使用了 SETGET 命令,键为 runoobkey

Redis 哈希(Hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

example:

127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visitors 23000
OK
127.0.0.1:6379> HGETALL runoobkey
1) "name"
2) "redis tutorial"
3) "description"
4) "redis basic commands for caching"
5) "likes"
6) "20"
7) "visitors"
8) "23000"

在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中。

Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

example:

127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
127.0.0.1:6379> LRANGE runoobkey 0 10
1) "mysql"
2) "mongodb"
3) "redis"

在以上实例中我们使用了 LPUSH 将三个值插入了名为 runoobkey 的列表当中。

Redis 集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

集合对象的编码可以是 intset 或者 hashtable。

example:

127.0.0.1:6379> SADD runoobkey redis
(integer) 1
127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
127.0.0.1:6379> SADD runoobkey mongodb
(integer) 0
127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
127.0.0.1:6379> SMEMBERS runoobkey
1) "mysql"
2) "redis"
3) "mongodb"

在以上实例中我们通过 SADD 命令向名为 runoobkey 的集合插入的三个元素。

Redis 有序集合(sorted set)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

example:

127.0.0.1:6379> ZADD runoobkey 1 redis
(integer) 1
127.0.0.1:6379> ZADD runoobkey 2 mongodb
(integer) 1
127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 1
127.0.0.1:6379> ZADD runoobkey 3 mysql
(integer) 0
127.0.0.1:6379> ZADD runoobkey 4 mysql
(integer) 0
127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"

在以上实例中我们通过命令 ZADD 向 redis 的有序集合中添加了三个值并关联上分数。

Redis HyperLogLog

Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。

example:

127.0.0.1:6379> PFADD runoobkey "redis"
(integer) 1
127.0.0.1:6379> PFADD runoobkey "mongodb"
(integer) 1
127.0.0.1:6379> PFADD runoobkey "mysql"
(integer) 1
127.0.0.1:6379> PFCOUNT runoobkey
(integer) 3

Redis 发布订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

img

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

img

example:

以下实例演示了发布订阅是如何工作的,需要开启两个 redis-cli 客户端。

在我们实例中我们创建了订阅频道名为 runoobChat:

# 第一个 redis-cli 客户端
127.0.0.1:6379> SUBSCRIBE runoobChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "runoobChat"
3) (integer) 1

现在,我们先重新开启个 redis 客户端,然后在同一个频道 runoobChat 发布两次消息,订阅者就能接收到消息。

127.0.0.1:6379> PUBLISH bb 'i am you'
(integer) 1
127.0.0.1:6379> PUBLISH bb 'can u feel that'
(integer) 1

# 订阅者的客户端会显示如下消息
127.0.0.1:6379> SUBSCRIBE bb
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "bb"
3) (integer) 1
1) "message"
2) "bb"
3) "i am you"
1) "message"
2) "bb"
3) "can u feel that"

Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

example:

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED
127.0.0.1:6379> GET book-name
QUEUED
127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED
127.0.0.1:6379> SMEMBERS tag
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Programming"
   2) "C++"
   3) "Mastering Series"

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

Redis 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

example:

127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

Redis 连接

Redis 连接命令主要是用于连接 redis 服务。

example:

redis 127.0.0.1:6379> AUTH "password"
OK
redis 127.0.0.1:6379> PING
PONG

Redis 服务器

Redis 服务器命令主要是用于管理 redis 服务。

example:

redis 127.0.0.1:6379> INFO

Redis 高级教程

Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份。

redis Save 命令基本语法如下:

redis 127.0.0.1:6379> SAVE 

该命令将在 redis 安装目录中创建dump.rdb文件。

恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

127.0.0.1:6379> config get dir
1) "dir"
2) "/var/lib/redis"

以上命令 CONFIG GET dir 输出的 redis 安装目录为 /var/lib/redis

Bgsave

创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

example:

127.0.0.1:6379> BGSAVE
Background saving started

Redis 安全

我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。

example:

我们可以通过以下命令查看是否设置了密码验证

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

你可以通过以下命令来修改该参数:

127.0.0.1:6379> CONFIG set requirepass "runoob"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "runoob"

设置密码后,客户端连接 redis 服务就需要密码验证,否则无法执行命令。

AUTH 命令基本语法格式如下:

127.0.0.1:6379> AUTH password

example:

127.0.0.1:6379> AUTH "runoob"
OK
127.0.0.1:6379> SET mykey "Test value"
OK
127.0.0.1:6379> GET mykey
"Test value"

Redis 性能测试

Redis 性能测试是通过同时执行多个命令实现的。

redis 性能测试的基本命令如下:

redis-benchmark [option] [option value]

注意:该命令是在 redis 的目录下执行的,而不是 redis 客户端的内部指令。

example:

以下实例同时执行 10000 个请求来检测性能

root@SYY:/usr/bin# redis-benchmark -n 10000 -q
PING_INLINE: 175438.59 requests per second
PING_BULK: 158730.16 requests per second
SET: 153846.16 requests per second
GET: 156250.00 requests per second
INCR: 147058.81 requests per second
LPUSH: 153846.16 requests per second
RPUSH: 161290.33 requests per second
LPOP: 158730.16 requests per second
RPOP: 156250.00 requests per second
SADD: 161290.33 requests per second
HSET: 151515.16 requests per second
SPOP: 153846.16 requests per second
LPUSH (needed to benchmark LRANGE): 158730.16 requests per second
LRANGE_100 (first 100 elements): 151515.16 requests per second
LRANGE_300 (first 300 elements): 158730.16 requests per second
LRANGE_500 (first 450 elements): 163934.42 requests per second
LRANGE_600 (first 600 elements): 163934.42 requests per second
MSET (10 keys): 185185.19 requests per second

Redis 客户端连接

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:

  • 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
  • 然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
  • 然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送

最大连接数

maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。

127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"

example:

在服务启动时设置最大连接数为 100000:

redis-server --maxclients 100000

Redis 管道技术

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

  • 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
  • 服务端处理命令,并将结果返回给客户端。

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

example:

查看 redis 管道,只需要启动 redis 实例并输入以下命令:

# (echo -en "PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n"; sleep 10) | nc localhost 6379
 
+PONG
+OK
redis
:1
:2
:3

以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们设置了 runoobkey 的值为 redis,然后我们获取 runoobkey 的值并使得 visitor 自增 3 次。

在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应。

PHP 使用 Redis

安装

  • 安装redis拓展
apt-get install php-redis
  • 修改php.ini文件
vim /etc/php/7.4/apache2/php.ini

增加如下内容:

extension=redis.so
  • 安装完成后重启apache。查看phpinfo信息,就能看到redis扩展。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gF171JvG-1650966123696)(https://cdn.jsdelivr.net/gh/JOHN-FROD/PicGo/blog-img/20211027175806.png)]

连接到 redis 服务

<?php
    //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   $resis->auth('mypass') //密码授权
   echo "Connection to server successfully";
         //查看服务是否运行
   echo "Server is running: " . $redis->ping();
?>

执行脚本,输出结果为:

Connection to server successfully
Server is running: 1

Redis PHP String(字符串) 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   $resis->auth('mypass') //密码授权
   echo "Connection to server successfully";
   //设置 redis 字符串数据
   $redis->set("tutorial-name", "Redis tutorial");
   // 获取存储的数据并输出
   echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>

执行脚本,输出结果为:

Connection to server successfully
Stored string in redis:: Redis tutorial

Redis PHP List(列表) 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   resis->auth('mypass') //密码授权
   echo "Connection to server successfully";
   //存储数据到列表中
   $redis->lpush("tutorial-list", "Redis");
   $redis->lpush("tutorial-list", "Mongodb");
   $redis->lpush("tutorial-list", "Mysql");
   // 获取存储的数据并输出
   $arList = $redis->lrange("tutorial-list", 0 ,5);
   echo "Stored string in redis";
   print_r($arList);
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis
Mysql
Mongodb
Redis

Redis PHP Keys 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   $resis->auth('mypass') //密码授权
   echo "Connection to server successfully";
   // 获取数据并输出
   $arList = $redis->keys("*");
   echo "Stored keys in redis:: ";
   print_r($arList);
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list
  echo "Connection to server successfully";
   //存储数据到列表中
   $redis->lpush("tutorial-list", "Redis");
   $redis->lpush("tutorial-list", "Mongodb");
   $redis->lpush("tutorial-list", "Mysql");
   // 获取存储的数据并输出
   $arList = $redis->lrange("tutorial-list", 0 ,5);
   echo "Stored string in redis";
   print_r($arList);
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis
Mysql
Mongodb
Redis

Redis PHP Keys 实例

<?php
   //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect('127.0.0.1', 6379);
   $resis->auth('mypass') //密码授权
   echo "Connection to server successfully";
   // 获取数据并输出
   $arList = $redis->keys("*");
   echo "Stored keys in redis:: ";
   print_r($arList);
?>

执行脚本,输出结果为:

Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis学习 的相关文章

  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • 如何将 ActionController::Live 与 Resque + Redis 一起使用(用于聊天应用程序)

    我正在尝试为我的 Rails 应用程序构建聊天功能 我在用ActionController Live Puma Resque Redis为了这 所以基本上在这种情况下 redissubscribe方法正在后台运行 使用resque 到目前为
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • Java 将字节转换为二进制安全字符串

    我有一些以字节为单位的数据 我想将它们放入Redis中 但是Redis只接受二进制安全字符串 而我的数据有一些二进制非安全字节 那么如何将这些字节转换为二进制安全字符串以便将它们保存到 Redis 中呢 Base64 对我有用 但它使数据更
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • docker-compose:容器之间的 Redis 连接被拒绝

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • 如何延长 django-redis 中的缓存 ttl(生存时间)?

    我正在使用 django 1 5 4 和 django redis 3 7 1 我想延长缓存的 ttl 生存时间 当我取回它时 这是示例代码 from django core cache import cache foo cache get
  • 由于配置文件错误,无法启动 Redis 服务器

    我刚刚按照此处的说明安装了 Redis http redis io download http redis io download 当我运行 redis server redis conf 时出现以下错误 FATAL CONFIG FILE
  • 使用环境变量在 redis.conf 中设置动态路径

    我有一个环境变量MY HOME其中有一个目录的路径 home abc 现在 我有一个redis conf文件 我需要像这样设置这个路径 redis conf pidfile MY HOME local var pids redis pid
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行
  • 集合成员的 TTL

    Redis 是否可以不为特定键而是为集合的成员设置 TTL 生存时间 我正在使用 Redis 文档提出的标签结构 数据是简单的键值对 标签是包含与每个标签对应的键的集合 例如 gt SETEX id id 1 100 Lorem ipsum
  • 使用 Redis 中的键

    我是 Redis 和键值数据库的新手 你能告诉我如何在redis中正确实现这种关系方法吗 我有一个关系表 其中两个键对应一个值 master id slave id 价值 Example 主站 ID 从属ID 价值 1 1 值1 2 1 值
  • 在redis中存储多个嵌套对象

    我想在redis中存储多个复杂的json数据 但不知道如何 这是我的 json 结构 users user01 username ally email email protected cdn cgi l email protection u

随机推荐

  • Jetpack学习之LiveData

    LiveData是一个可被观察的数据容器类 它是一个数据的容器 将数据包装起来 使数据成为被观察者 当该数据发生变化时 观察者能够获得通知 和ViewModel的关系 ViewModel用于存放页面所需的各种数据 以及数据相关的业务逻辑 因
  • sc 不是内部或外部命令

    安装nodejs 或yarn后 发现控制台命令会提示 sc 不是内部或外部命令 问题原因 nodejs或yarn安装后 会把系统默认环境变量Path的值给替换了 解决方案 将系统环境变量Path的值后面加上 SystemRoot syste
  • java superclass_java Class的 getSuperclass与getGenericSuperclass区别

    Class的getInterfaces与getGenericInterface区别 http www cnblogs com maokun p 6773076 html 一 getSuperclass 返回直接继承的父类 由于编译擦除 没有
  • 【好题】第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 F-第二大数 思维

    题 求各个范围的第二大数 举个例子 4 9 6 4 5 6 4 4 6 5 6 第二大数分别是 6 4 4 6 5 6 我们的做法就是按照题目顺序 i从1开始 j从i 1开始 每次记录当前最大数和第二大数 对于每次新出现的数a j 如果它大
  • 二维动态规划>>01背包问题与普遍应用

    0 内容梗概 在二维动态规划中 01背包问题是动态规划中的经典问题 本文首先学习 总结01背包问题的思路 方法与实现 之后 01背包问题与其说是问题 更可以是一种解题思路 或者说套路 如果遇到别的题目时 能够清楚地判断出它是一个01背包的类
  • 【Metashape精品教程2】创建工程

    Metashape精品教程2 创建工程 文章目录 Metashape精品教程2 创建工程 前言 一 导入照片 二 导入pos 三 设置相机参数 没有可不设置 让软件反算相机参数 四 导入控制点 五 保存工程 前言 本章内容主要讲解工程的创建
  • statsmodels中的summary解读(OLS)

    Dep varible y 输出y变量的名称 Model OLS 使用的参数确定的模型OLS Method Least Squares 使用最小二乘法确定参数 Date Sat 10 Aug 2019 日期 Time 18 10 04 时间
  • 什么是Spring Cloud Config

    Spring Cloud Config 是一个解决分布式系统的配置管理方案 它包含 Client和 Server 两个部分 Server 提供配置文件的存储 以接口的形式将配置文件的内容提供出去 Client 通过接口获取数据 并依据此数据
  • 艺术+DeFi,看MEME如何玩转NFT

    内容概述 MEME代币已经成功登陆加密货币交易所Poloniex 就在成功上市之后 MEME代币价格一度飙升至1800美元高位 MEME协议允许人们赚取 菠萝积分 并将其兑换为NFT代币 9月22日 加密货币交易所Poloniex在其DeF
  • 机器学习阶段总结一

    最近一直在看机器学习相关内容 主要是看的斯坦福的Andrew Ng教授的公开课视频 可以点这里 看了前四讲 最大的感觉就是这简直就是概率论 线代 用到的数学知识着实不少 不过也挺有趣的 继续学下去 初步总结一下 主要是关于监督学习 回归分类
  • Redis学习:Redis的持久化

    Redis的持久化方式有两种 rdb和aof rdb理解为快照 save规则出发会的得到一个快照 aof是追加的形式 可以理解为binlog那种 RDB 在进行 RDB 的时候 redis 的主线程是不会做 io 操作的 主线程会 fork
  • 独门秘籍奉上!听说这是CCF遥感地块分割比赛冠军的“获胜法宝”!

    飞桨开发者说 黎昆昌 CCF BDCI遥感影像地块分割赛道冠军团队 CCF BDCI 2020 综合特等奖团队队长 中国科学院深圳先进技术研究院20级硕士 CCF大数据与计算智能大赛 CCF BCI 由中国计算机学会于2013年创办 作为全
  • Nginx配置不缓存html

    Nginx配置不缓存html 1 配置nginx不缓存html 1 1 修改配置文件 1 2 验证 2 Vue项目修改根目录index html 1 配置nginx不缓存html 1 1 修改配置文件 location expires 1h
  • 有特别有创意的网站设计案例

    有人说 UI 设计师集艺术性与科学性于一身 不仅需要对工具的使用熟练 更需要对美术艺术有一定的基础了解 如果想要成为优秀的 UI 设计师是一个需要磨砺的过程 需要不断的学习和积累 多看多练多感受 其中对于优质的设计案例的收集和练习是重要的
  • 清晰、幽默、轻松地深入理解YOLOv5网络结构和一些细节(查阅无数资料文献总结)

    最近的一篇关于YOLOv5检测小目标博客的点击量很高 没想到YOLOv5还是很有影响力的 既然这样 今天本人就本着幽默 清晰 轻松的风格带大家深入了解一下YOLOv5那倾倒众生的网络结构 和它较之其他算法的改进之处 还是一句话 希望我的不经
  • JavaScript的一种单元测试框架:mocha

    mocha 如果你听说过 测试驱动开发 TDD Test Driven Development 单元测试就不陌生 单元测试是用来对一个模块 一个函数或者一个类来进行正确性检验的测试工作 比如对函数abs 我们可以编写出以下几个测试用例 输入
  • pytorch 2.0.1 版本 [gpu] 安装

    安装Anaconda 1 下载官网 我们下载anaconda的目的主要是为了下一步的python环境管理 所以不考虑anaconda与已有的python的版本是否匹配的问题 下方点击之后会出现 可以根据自己的需要下载安装包 本文以Windo
  • QSerialPort串口数据传输上位机实时显示

    1 项目背景 通过串口实时传输下位机造的一帧图像数据 然后利用qt编写上位机 实现图像数据的实时显示 并保存任意帧数据 2 效果展示 3 下位机代码 include bsp clk h include bsp delay h include
  • 使用Python爬取多篇各类新闻文章

    一 简介 这篇文章主要是使用python中的requests和BeautifulSoup库来爬取上万篇的新闻文章 我这里以科技类新闻为例来爬取2000篇新闻文章http news chinairn com News moref9fff1 h
  • Redis学习

    Redis简介 REmote DIctionary Server Redis 是一个由 Salvatore Sanfilippo 写的 key value 存储系统 是跨平台的非关系型数据库 Redis 是一个开源的使用 ANSI C 语言