Redis

redis

1. 简介:

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询, bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

以上说明来自官网

整理一下其特性:

Redis的优势

Redis 与其他 key-value 存储有什么不同?

Redis的应用场景

  1. 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
  2. 即时信息查询,如公交到站信息、在线人数信息等
  3. 时效性信息控制,如验证码控制、投票控制等
  4. 分布式数据共享,如分布式集群架构中的session分离消息队列

2.Redis的安装

tar -xf redis-*.tar.gz
cd redis-*
make
make PREFIX=/usr/local/redis install

cp ./redis.conf /usr/local/redis/bin/

部署redis主服务

# 启用守护模式
#vim /usr/local/redis/bin/redis.conf
sed -i 's/^daemonize no/daemonize yes/' /usr/local/redis/bin/redis.conf

# 禁用保护模式
sed -i 's/^protected-mode yes/protected-mode no/' /usr/local/redis/bin/redis.conf

# 绑定IP
sed -i '/^bind 127.0.0.1/a\bind 0.0.0.0' /usr/local/redis/bin/redis.conf

# 创建符号链接
#[ -f /usr/local/bin/redis-server ] && mv -f /usr/local/bin/redis-server /usr/local/bin/redis-server.bak
#ln -s /usr/local/redis/bin/redis-server /usr/local/bin/redis-server
#[ -f /usr/local/bin/redis-cli ] && mv -f /usr/local/bin/redis-cli /usr/local/bin/redis-cli.bak
#ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli

系统服务

cd /usr/local/redis/redis-*
cp -a utils/redis_init_script /etc/init.d/redisd

vim /etc/rc.d/init.d/redisd
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/${REDISPORT}.conf"

开机启动

chkconfig --add /etc/init.d/redisd

chkconfig redisd on
service redisd restart
service redisd stop

配置外网访问

redis3.0 以上的版本默认启用了安全机制较高的防护模式(protected-mode)。
redis2.x 只需要 bind 0.0.0.0,并开放防火墙端口即可外网访问;而redis3.x版本需要在此基础上禁用防护模式。

# redis-cli // 进入redis命令行模式
xxxx:6379> CONFIG SET protected-mode no // 禁用防护模式

redis禁用危险命令

1、打开redis配置文件
vim redis.conf
2、找到##SECURITY##区域,按照Example配置rename_command
:/rename_command
#n下一个,N上一个
3、禁用命令
rename-command KEYS     ""
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""
4、重命名命令
rename-command KEYS     "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command FLUSHALL "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command FLUSHDB  "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command CONFIG   "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

启动

#启动redis-server
cd /usr/local/redis/bin/
./redis-server redis.conf

#启动redis-cli
cd /usr/local/redis/bin/
./redis-cli

部署从服务

Slave节点安装过程完全一样,redis.conf配置和之前的配置参数一样,然后在这个基础上继续添加下面的配置:

# 读写分离,配置只读
# slave-read-only yes

# 设置master的ip地址和端口号
slaveof <masterip> <masterport>

# 配置密码
requirepass password

# 若mastr配置了密码,则slave需配置
masterauth <master-password>

程序功能

bin目录下文件名称 文件作用
Redis-benchmark 压力测试。标准是每秒80000次写操作,110000次读操作 (服务启动起来后执行,类似安兔兔跑分)
Redis-check-aof 修复有问题的AOF文件
Redis-check-dump 修复有问题的dump.rdb文件
Redis-sentinel 启动哨兵,集群使用
redis-server 启动服务器
redis-cli 启动客户端

redis 查看版本号

./redis-server -v
Redis server v=5.0.12 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=4af5e2b61c3d50c9

Redis相应的shell命令的操作可以参见菜鸟教程https://www.runoob.com/redis/redis-install.html

redis-cli 常用命令

./redis-cli -h "${redis_host}" -p "${redis_port:-6379}" -a "${redis_password:-""}"

# 直接执行命令
./redis-cli <command>

# 查询并删除
./redis-cli keys 'key*' | xargs -r -n1 redis-cli del

注: 当出现认证问题时候,输入"auth 'ilanniredis'"即可
127.0.0.1:6379> auth "ilanniredis"
OK

keys * 查看redis所有的键值对。
keys abc*  查看所有以 abc 开头的key
keys *abc  查询所有以 abc 结尾的key

set ilanni testredis 添加一个 key: ilanni,内容为testredis。
get ilanni 查看ilanni这个 key 的内容。

查看 list 类型的 key: abc 的长度
llen abc

查看 list 类型的 key: abc 从 0 - 1 下标的值
cdp-redis02-prd.redis.rds.aliyuncs.com:16379> lrange abc 0 1
1) "{"", ""}"

set key value 设置key的值为value
set key value nx,设置key的值为value,若key已存在则返回失败
set key value xx,无论key是否存在都执行set并返回OK
incr key,使key对应的value自增1
incrby key num,使key对应的value自增num
decr key,使key对应的value自减1
decrby key num,使key对应的value自减num
注:incr、incrby、decr和decrby都是原子的

mset key1 value1 key2 value2 key3 value3,使用mset可以同时设置多个key的值
mget key1 key2 key3,使用么get可以检索多个key的值,返回的是一个数组

exists key,返回0或1,表示数据库中是否存在该key
exists [key],返回一个integer,[key]中有多少存在于数据库中

del [key],删除数据库中[key]中所有的key,返回一个integer,表示删除了多少个key
type key,返回key对应的value数据类型

# 查询key数量
方法1、dbsize
dbsize 显示当前库key的数量

192.168.0.1:6379> dbsize
(integer) 69421

方法2 、info keyspace
info keyspace 可以看到所有库key的数量

192.168.0.1> info keyspace
# Keyspace
db0:keys=13,expires=1,avg_ttl=172490826

redis 中如何切换db

redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的实例上呢?就相当于MySQL数据库,不同的应用程序数据存储在不同的数据库下。

redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,一个客户端连接到数据库0。redis配置文件中下面的参数来控制数据库总数:

/etc/redis/redis.conf
文件中,有个配置项 databases = 16 //默认有16个数据库

可以通过下面的命令来切换到不同的数据库下
select 4

redis 获取配置

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379>

redis 查看信息

127.0.0.1:6379> info
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:40a895d95db4d255
redis_mode:standalone
os:Linux 2.6.32-431.el6.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.7
process_id:4715
run_id:7c493b1ec7a012642a6db9479e43d9700fe273b5
tcp_port:6379
uptime_in_seconds:379
uptime_in_days:0
hz:10
lru_clock:6416492
executable:/usr/local/redis/bin/./redis-server
config_file:/usr/local/redis/bin/redis.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:822688
used_memory_human:803.41K
used_memory_rss:7786496
used_memory_rss_human:7.43M
used_memory_peak:822688
used_memory_peak_human:803.41K
total_system_memory:4010737664
total_system_memory_human:3.74G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:9.46
mem_allocator:jemalloc-4.0.3

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1600251633
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:2
total_commands_processed:7
instantaneous_ops_per_sec:0
total_net_input_bytes:187
total_net_output_bytes:26507
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:0.26
used_cpu_user:0.03
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace
127.0.0.1:6379>

3.Redis配置文件

redis配置文件为redis安装的bin目录下redis.conf文件

1.单位配置

# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes

1k和1kb是不同的,单位的大小写不敏感

2.include参数

可以将公共的配置放入到一个公共的配置文件中,然后通过子配置文件引入父配置文件中的内容!

将配置按照模块分开!一般将引用公共配置的文件表示放在配置最前边:redis 服务启动需要指定对应的配置文件,默认是bin下的redis.conf文件。

################################## INCLUDES ###################################

# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include /path/to/local.conf
# include /path/to/other.conf

3.Network参数配置

属性 含义 备注
bind 限定访问的主机地址 如果没有bind,就是任意ip地址都可以访问。生产环境下,需要写自己应用服务器的ip地址。
protected-mode 安全防护模式 如果没有指定bind指令,也没有配置密码,那么保护模式就开启,只允许本机访问(loaclhost或127.0.0.1)。
port 端口号 默认是6379
tcp-backlog 网络连接过程中,某种状态的队列的长度 redis是单线程的,指定高并发时访问时排队的长度。超过后,就呈现阻塞状态。可以理解是一个请求到达后至到接受进程处理前的队列长度。(一般情况下是运维根据集群性能调控)高并发情况下,此值可以适当调高。
timeout 超时时间 默认永不超时
tcp-keepalive 对客户端的心跳检测间隔时间

4.general参数配置

属性 含义 备注
daemonize 是否为守护进程模式运行 守护进程模式可以在后台运行
pidfile 进程id文件保存的路径 配置PID文件路径,当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面
loglevel 定义日志级别 debug(记录大量日志信息,适用于开发、测试阶段) verbose(较多日志信息) notice(适量日志信息,使用于生产环境) warning(仅有部分重要、关键信息才会被记录)
logfile 日志文件的位置 当指定为空字符串时,为标准输出,如果redis以守护进程模式运行,那么日志将会输出到/dev/null
syslog-enabled 是否记录到系统日志 要想把日志记录到系统日志服务中,就把它改成 yes
syslog-ident 设置系统日志的ID
syslog-facility 指定系统日志设置 必须是 USER 或者是 LOCAL0-LOCAL7 之间的值
databases 设置数据库数量 默认16,索引为0-15,通过select num 进行选择

5.其他

属性 含义 备注
requirepass 设置密码
maxclients 最大连接数
maxmemory 最大占用多少内存 一旦占用内存超限,就开始根据缓存清理策略移除数据如果Redis无法根据移除规则来移除内存中的数据,或者设置了“不允许移除”, 那么Redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等。
maxmemory-policy noeviction 缓存清理策略 (1)volatile-lru:使用LRU算法移除key,只对设置了过期时间的键 (2)allkeys-lru:使用LRU算法移除key (3)volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键 (4)allkeys-random:移除随机的key (5)volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key (6)noeviction:不进行移除。针对写操作,只是返回错误信息
maxmemory-samples 样本数 样本数越小,准确率越低,但是性能越好。 LRU算法和最小TTL算法都并非是精确的算法,而是估算值, 所以你可以设置样本的大小。一般设置3到7的数字。

4.持久化

Redis是怎么进行持久化的?Redis数据都在内存中,内存本身就不是一个持久化设备,一断电或者重启不就木有了嘛?

如何避免这个问题或者尽可能减少数据丢失。

我们在开篇的时候介绍redis的时候也讲到redis是支持持久化,为此,redis提供了不同级别的持久化方式:

以上的持久化级别只是两种持久化方式的组合。那我们现在就分别看看这两种持久化方式的具体实现。

4.1.RDB持久化方式

4.1.1RDB简介:

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

4.1.2 工作机制

每隔一段时间,就把内存中的数据保存到硬盘上的指定文件中。

RDB是默认开启的!

4.1.3 RDB特点

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

最后一次持久化后的数据可能丢失

比如:两次保存的时间间隔内,服务器宕机,或者发生断电问题。

在这里插入图片描述

4.1.4 RDB保存策略和触发机制

保存策略

RDB触发机制

4.1.5 RDB优缺点
优点:
缺点

4.2 AOF持久化方式

4.2.1 AOF简介

AOF是以日志的形式来记录每个写操作,将每一次对数据进行修改,都把新建、修改数据的命令保存到指定文件中。Redis重新启动时读取这个文件,重新执行新建、修改数据的命令恢复数据。

默认不开启,需要手动开启

AOF文件的保存路径,同RDB的路径一致。

AOF在保存命令的时候,只会保存对数据有修改的命令,也就是写操作!

当RDB和AOF存的不一致的情况下,按照AOF来恢复。因为AOF是对RDB的补充。备份周期更短,也就更可靠。

4.2.2 AOF 保存策略
4.2.3 AOF文件修复

如果AOF文件中出现了残余命令,会导致服务器无法重启。此时需要借助redis-check-aof工具来修复!

redis-check-aof  --fix 文件
4.2.4 AOF的优缺点
优点
缺点

4.3 如何选择?

小孩子才做选择,要学会全都要,你单独用RDB你会丢失很多数据,你单独用AOF,你数据恢复没RDB来的快,真出什么问题的时候第一时间用RDB恢复,然后AOF做数据补全,真香!冷备热备一起上,才是互联网时代一个高健壮性系统的王道。

Redis作为内存数据库从本质上来说,如果不想牺牲性能,就不可能做到数据的“绝对”安全。

RDB和AOF都只是尽可能在兼顾性能的前提下降低数据丢失的风险,如果真的发生数据丢失问题,尽可能减少损失。

在整个项目的架构体系中,Redis大部分情况是扮演“二级缓存”角色。二级缓存适合保存的数据

如果Redis是作为缓存服务器,那么说明数据在MySQL这样的传统关系型数据库中是有正式版本的。数据最终以MySQL中的为准。

5. 事务

5.1 redis中事务简介

5.2 redis事务常用命令(shell)

MULTI 标记一个事务块的开始
EXEC 执行事务中所有在排队等待的指令并将链接状态恢复到正常 当使用WATCH 时,只有当被监视的键没有被修改, 且允许检查设定机制时,EXEC会被执行
DISCARD 刷新一个事务中所有在排队等待的指令,并且将连接状态恢复到正常。 如果已使用WATCH,DISCARD将释放所有被WATCH的key。
WATCH 标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁)

5.3 Redis事务演示

5.3.1 简单组队

MULTI开启组队,EXEC依次执行队列中的命令。

在这里插入图片描述

DISCARD中途取消组队

在这里插入图片描述

5.3.2 组队失败
”殃及池鱼“

在编译的过程中,Redis检测出来了错误的语法命令,因此它认为这条组队,一定会发生错误,因此全体取消

在这里插入图片描述

”自作自受“

此种情况,语法符合规范,Redis只有在执行中,才可以发现错误。而在Redis中,并没有回滚机制,因此错误的命令,无法执行,正确的命令会全部执行!

在这里插入图片描述

为什么Redis不支持回滚

如果使用关系型数据如MySQL、SQL Server、Oracle等,事务不支持回滚会觉得有点出乎意料,有点奇怪。

引用官方的说明:

5.4redis 锁及策略

Redis不支持悲观锁。Redis作为缓存服务器使用时,以读操作为主,很少写操作,相应的操作被打断的几率较少。不采用悲观锁是为了防止降低性能。

策略

6.主从复制

6.1 什么是Redis主从复制

当单机Redis的性能是有限的,而Redis常用其读高并发的特性,当一台Redis有要读又要写的时候,这就顶不住了啊。太过于压榨就会崩溃的哦。那就把读写分离,又因为读的需求是大于写的操作并发,就可以用一个master机器去写,其他多个salve机器去完成读的任务请求。不仅实现了redis存储的扩容,还实现了水平扩容。

配置多台Redis服务器,以主机和备机的身份分开。主机数据更新后,根据配置和策略,自动同步到备机的master/salver机制,Master以写为主,Slave以读为主,二者之间自动同步数据。

在这里插入图片描述

主从目的:

机制原理:

每次从机联通后,都会给主机发送sync指令,主机立刻进行存盘操作,发送RDB文件到从机,从机收到RDB文件后,进行全盘加载。之后每次主机的写操作命令,都会立刻发送给从机,从机执行相同的命令来保证主从的数据一致!

注意:主库接收到SYNC的命令时会执行RDB过程,即使在配置文件中禁用RDB持久化也会生成,但是如果主库所在的服务器磁盘IO性能较差,那么这个复制过程就会出现瓶颈,庆幸的是,Redis在2.8.18版本开始实现了无磁盘复制功能(不过该功能还是处于试验阶段),设置repl-diskless-sync yes。即Redis在与从数据库进行复制初始化时将不会将快照存储到磁盘,而是直接通过网络发送给从数据库,避免了IO性能差问题。

在这里插入图片描述

6.2 配置redis主从复制

6.2.1 准备

不同的主机配置不同的Redis服务,否则在一台机器上面跑多个Redis服务,需要配置多个Redis配置文件。

daemonize yes: 服务在后台运行
port:端口号
pidfile:pid保存文件
logfile:日志文件(如果没有指定的话,就不需要)
dump.rdb: RDB 
appendonly 关掉,或者是更改appendonly文件的名称。
6.2.2 配置
原则:配从不配主
一、临时建立主从关系

在这里插入图片描述

二 永久建立

在从节点配置文件中,编写slaveof属性配置

# slaveof <masterip> <masterport>
三 恢复身份

命令:slaveof no one

7.哨兵模式

7.1 简介

在主从复制下,只有一个master,那master如果挂了,整个redis就不能保证可用了。如果某一个slave节点崩溃了,同样我们不能在分配对应的请求到该节点进行读操作。如何监控主从状态,并解决master单点故障问题?哨兵模式应用而生。

作用

哨兵必须用三个实例去保证自己的健壮性的,哨兵+主从并不能保证数据不丢失,但是可以保证集群的高可用

多个哨兵,不仅同时监控主从状态,且哨兵之间也互相监控!

redis_sentinel1

下线

①主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。

②客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,然后开启failover.

工作原理

redis_sentinel2

总结

好了,今天的文章就结束了,我们从互联网的架构演变来看各个组件服务的需求,从而引出了NoSQL。Redis作为当前缓存服务器的弄潮儿,我们从Redis的官网介绍分析了redis的特点,也给出了Redis安装的示例以及我们一般关注的配置参数的作用。接着从Redis的持久化了解了RDB持久化方式特点以及其优缺点、AOF持久化机理 与优缺点。接着对于Redis的主从复制以及事务了解了Redis的高可用,了解了哨兵模式的背景和机制。部分操作文章没有列出,因为觉得官网已经很详尽了,另外菜鸟教程网站对于命令也算详尽就没有重复列出。建议大家手动在Linux环境下安装redis,眼过千遍不如手敲一遍。
我是清风,希望这篇文章对你有帮助,怕什么真理无穷,进一寸有一寸的欢喜。奥利给。

Redis主从在线互相切换

由于某些原因,我们可能需要将redis master更换机器,我们可以停机进行更换,但是那样可能影响到用户体验。本文简要操作进行不停机迁移。

系统环境

CentOS 6.3 x64
redis-server 2.6.16
机器两台s1\s2

操作步骤

1、我们在新redis服务器上,启动一个redis实例,配置和master配置一致,不同的是配置文件中修改并启用 slave-read-only no,让slave 能写,因为 “Since Redis 2.6 by default slaves are read-only.”
2、让新redis成为slave:redis 127.0.0.1:6379>SLAVEOF s1 6379,然后可以查看s2上的log,会有大量的同步信息,也可以使用info命令查看状态。
3、s2完全同步s1的数据后,我们修改游戏app的redis ip,改为s2的ip。
4、查看游戏是否正常。
5、以上没有问题后,在s2上执行 redis 127.0.0.1:6379> SLAVEOF NO ONE
6、下线s1

PS:

SLAVEOF host port

SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。

通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。

如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。

可用版本:

= 1.0.0
时间复杂度:
SLAVEOF host port ,O(N), N 为要同步的数据数量。
SLAVEOF NO ONE , O(1) 。
返回值:
总是返回 OK 。

插件

RedisBloom

github

tar zxvf RedisBloom-*.tar.gz
cd RedisBloom-*
make

cp -a redisbloom.so ../redis-5.0.12/utils/

./redis-server --loadmodule /path/to/redisbloom.so

./redis-server /usr/local/redis/conf/redis_6380.conf --loadmodule /usr/local/redis/src/rebloom.so INITIAL_SIZE 10000000 ERROR_RATE 0.0001
指定了默认的容量与容错率

也可以在redis.conf中加载插件
loadmodule /usr/local/redis/redis-5.0.5/utils/RedisBloom/redisbloom.so

验证是否加载了RedisBloom:
./redis-cli
127.0.0.1:6379> bf.add hello 0001
(integer) 0
127.0.0.1:6379> bf.exists hello 0001
(integer) 1
127.0.0.1:6379> bf.exists hello 0000
(integer) 0
127.0.0.1:6379> bf.exists hello 0002
(integer) 0
127.0.0.1:6379>

redis-desktop-manager

redis 连接配置路径
右上角 设置 - 底下 Custom Value View Formatters - 上一级目录 connections.json