Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
一、redis 服务器配置–redis.conf 配置
1、服务器端设定
1)设置服务器以守护进程的方式运行: daemonize yes|no
2)绑定主机地址: bind 127.0.0.1
3)设置服务器端口号: port 6379
4)设置数据库数量: databases 16
2、redis 实际操作演示–redis.conf 配置(redis-server)
# 切换到 redis 安装目录 (redis-server)
cd /usr/local/redis/redis-4.0.0/# 查看 redis 服务是否后台启动成功:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-# 杀死 redis 服务进程(如果已经启动 redis 服务,可以先停止服务,如:PID 1742)
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# kill -s 9 1742# 修改 conf/redis-6379.conf 配置文件,添加绑定主机地址: bind 127.0.0.1 相关配置。
vim conf/redis-6379.conf# 保存以下内容即可:
port 6379
daemonize yes
logfile "6379.log"# redis 持久化 -- RDB 相关配置
# data 目录为新建目录(设置存储.rdb文件的路径)
dir /usr/local/redis/redis-4.0.0/data# 设置本地数据库文件名:
dbfilename dump-6379.rdb
# 设置存储至本地数据库时是否压缩数据
rdbcompression yes
# 设置是否进行 RDB 文件格式校验
rdbchecksum yes# save配置(每10秒有2次数据变化就自动保存)
save 10 2# 添加如下配置(AOF存储功能)
# 开启AOF持久化功能
appendonly yes
# AOF写数据策略(每次)
appendfsync always
# 设置文件名
appendfilename appendonly-6379.aof# 绑定主机地址:
bind 127.0.0.1# 设置数据库数量:
databases 16# 指定配置文件,启动 redis 服务:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-server conf/redis-6379.conf
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root 1742 1 0 22:40 ? 00:00:00 redis-server *:6379
root 1748 1367 0 22:40 pts/2 00:00:00 grep --color=auto redis-
3、redis 实际操作演示–打开另一客户端连接(redis-cli-01)
# 切换到 redis 安装目录
cd /usr/local/redis/redis-4.0.0/# 指定端口号,启动 redis 客户端:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-cli -p 6379# 采用 info 命令查看 redis 服务信息,
127.0.0.1:6379> info
# Server
redis_version:4.0.0
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:6027d33076b6701c
redis_mode:standalone
os:Linux 5.15.153.1-microsoft-standard-WSL2 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:7.5.0
process_id:1755
run_id:a9336e66ca7a594260ff5244edca8dddbb5a2785
tcp_port:6379
uptime_in_seconds:246
uptime_in_days:0
hz:10
lru_clock:10124785
executable:/usr/local/redis/redis-4.0.0/redis-server
config_file:/usr/local/redis/redis-4.0.0/conf/redis-6379.conf# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0# Memory
used_memory:827904
used_memory_human:808.50K
used_memory_rss:9654272
used_memory_rss_human:9.21M
used_memory_peak:827904
used_memory_peak_human:808.50K
used_memory_peak_perc:100.16%
used_memory_overhead:815398
used_memory_startup:765624
used_memory_dataset:12506
used_memory_dataset_perc:20.08%
total_system_memory:4047536128
total_system_memory_human:3.77G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:11.66
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1721400583
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:225280
aof_enabled:1
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
aof_last_cow_size:0
aof_current_size:1887
aof_base_size:1887
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0# Stats
total_connections_received:1
total_commands_processed:1
instantaneous_ops_per_sec:0
total_net_input_bytes:31
total_net_output_bytes:10162
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:177
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0# Replication
role:master
connected_slaves:0
master_replid:3b10b8c9e8f7158f9ba8c0e6866219d472365c9b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0# CPU
used_cpu_sys:0.10
used_cpu_user:0.05
used_cpu_sys_children:0.00
used_cpu_user_children:0.00# Cluster
cluster_enabled:0# Keyspace
db0:keys=2,expires=0,avg_ttl=0
127.0.0.1:6379>
4、日志配置
1)设置服务器以指定日志记录级别: loglevel debug|verbose|notice|warning
2)日志记录文件名: logfile 端口号.log
5、注意事项:
日志级别开发期设置为 verbose 即可,生产环境中配置为 notice,简化日志输出量,降低写日志 IO 的频度。
6、客户端配置
1)设置同一时间最大客户端连接数,默认无限制。当客户端连接到达上限,Redis 会关闭新的连接
maxclients 0
2)客户端闲置等待最大时长,达到最大值后关闭连接。如需关闭该功能,设置为 0
timeout 300
7、多服务器快捷配置
- 导入并加载指定配置文件信息,用于快速创建 redis 公共配置较多的 redis 实例配置文件,便于维护。
include /path/server-端口号.conf
二、redis 高级数据类型–bitmaps 介绍与基本操作
1、Bitmaps 类型的基础操作
1)获取指定 key 对应偏移量上的 bit 值
getbit key offset
2)设置指定 key 对应偏移量上的 bit 值,value 只能是 1 或 0
setbit key offset value
2、redis 实际操作演示–bitmaps 介绍与基本操作
# 切换到 redis 安装目录 (redis-server 服务端)
cd /usr/local/redis/redis-4.0.0/# 查看 redis 服务是否后台启动成功:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-# 杀死 redis 服务进程(如果已经启动 redis 服务,可以先停止服务,如:PID 1742)
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# kill -s 9 1742# 指定配置文件,启动 redis 服务:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-server conf/redis-6379.conf
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root 1742 1 0 22:40 ? 00:00:00 redis-server *:6379
root 1748 1367 0 22:40 pts/2 00:00:00 grep --color=auto redis-# 打开另一客户端连接(redis-cli-01)# 切换到 redis 安装目录(redis-cli-01)
cd /usr/local/redis/redis-4.0.0/# 指定端口号,启动 redis 客户端:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-cli -p 6379# bitmaps 高级数据类型操作
127.0.0.1:6379> setbit bits 0 1
(integer) 0
127.0.0.1:6379> getbit bits 0
(integer) 1
127.0.0.1:6379> getbit bits 10
(integer) 0
127.0.0.1:6379> setbit bits 100000000 1
(integer) 0
(1.21s)
三、redis 高级数据类型–bitmaps扩展操作
1、Bitmaps 类型的扩展操作
1)业务场景:电影网站
- 统计每天某一部电影是否被点播
- 统计每天有多少部电影被点播
- 统计每周/月/年有多少部电影被点播
- 统计年度哪部电影没有被点播
2)业务分析:
58-Bitmaps类型的扩展操作.png
2、Bitmaps 类型的扩展操作
1)对指定 key 按位进行交、并、非、异或操作,并将结果保存到 destKey 中
bitop op destKey key1 [key2...]and : 交
or : 并
not : 非
xor : 异或
2)统计指定 key 中 1 的数量
bitcount key [start end]
3、redis 实际操作演示–bitmaps 扩展操作
# 切换到 redis 安装目录 (redis-server 服务端)
cd /usr/local/redis/redis-4.0.0/# 查看 redis 服务是否后台启动成功:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-# 杀死 redis 服务进程(如果已经启动 redis 服务,可以先停止服务,如:PID 1742)
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# kill -s 9 1742# 指定配置文件,启动 redis 服务:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-server conf/redis-6379.conf
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root 1742 1 0 22:40 ? 00:00:00 redis-server *:6379
root 1748 1367 0 22:40 pts/2 00:00:00 grep --color=auto redis-# 打开另一客户端连接(redis-cli-01)# 切换到 redis 安装目录(redis-cli-01)
cd /usr/local/redis/redis-4.0.0/# 指定端口号,启动 redis 客户端:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-cli -p 6379# bitmaps 高级数据类型操作# 清空数据
127.0.0.1:6379> flushall
OK# 设置 6 个值
127.0.0.1:6379> setbit 20880808 0 1
(integer) 0
127.0.0.1:6379> setbit 20880808 4 1
(integer) 0
127.0.0.1:6379> setbit 20880808 8 1
(integer) 0
127.0.0.1:6379> setbit 20880808 0 1
(integer) 1
127.0.0.1:6379> setbit 20880809 0 1
(integer) 0
127.0.0.1:6379> setbit 20880809 5 1
(integer) 0
127.0.0.1:6379> setbit 20880809 8 1# 统计数量
127.0.0.1:6379> bitcount 20880808
(integer) 3
127.0.0.1:6379> bitcount 20880809
(integer) 3
127.0.0.1:6379> setbit 20880808 6 1
(integer) 0
127.0.0.1:6379> bitcount 20880808
(integer) 4# 合并数据
127.0.0.1:6379> bitop or 08-09 20880808 20880809
(integer) 2# 统计合并后的数据个数
127.0.0.1:6379> bitcount 08-09
(integer) 5
4、redis 应用 场景:
1)redis 用于控制数据库表主键 id,为数据库表主键提供生成策略,保障数据库表的主键唯一性此方案适用于所有数据库,且支持数据库集群。
2)redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作。
3)redis 可应用于各种结构型和非结构型高热度数据访问加速。
4)redis 应用于购物车数据存储设计。
5)redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6)redis 应用于具有操作先后顺序的数据控制。
7)redis 应用于最新消息展示。
8)redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐大V推荐等。
9)set 类型数据的扩展操作:
- redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索。
- 显示共同关注(一度)。
- 显示共同好友(一度)。
- 由用户A出发,获取到好友用户B的好友信息列表(一度)。
- 由用户A出发,获取到好友用户B的购物清单列表(二度)。
- 由用户A出发,获取到好友用户B的游戏充值列表(二度)。
10)redis 应用于同类型不重复数据的合并操作。
11)redis 应用于同类型数据的快速去重。
12)redis 应用于基于黑名单与白名单设定的服务控制。
13)redis 应用于计数器组合排序功能对应的排名。in
14)redis 应用于定时任务执行顺序管理或任务过期管理。
15)redis 应用于即时任务/消息队列执行管理。
16)redis 应用于限时按次结算的服务控制。
17)redis 应用于基于时间顺序的数据操作,而不关注具体时间。
18)redis 应用基于状态控制的批量任务执行.
19)redis 应用基于分布式锁对应的场景控制。
20) 导入并加载指定配置文件信息,用于快速创建 redis 公共配置较多的 redis 实例配置文件,便于维护。
21)redis 应用于信息状态统计。
四、redis 高级数据类型–HyperLogLog
1、统计独立 UV
1)原始方案:set 存储每个用户的id(字符串)。
2)改进方案:Bitmaps 存储每个用户状态(bit)。
3)全新的方案:Hyperloglog。
2、HyperLogLog 基数统计。
- 基数是数据集去重后元素个数。
- HyperLogLog 是用来做基数统计的,运用了 LogLog 的算法。
如:
{1, 3, 5, 7, 5, 7, 8} 基数集: {1, 3, 5 ,7, 8} 基数:5
{1, 1, 1, 1, 1, 7, 1} 基数集: {1,7} 基数:2
3、LogLog 算法:
4、HyperLogLog 类型的基本操作
1)添加数据: pfadd key element [element …]
2)统计数据: pfcount key [key …]
3)合并数据: pfmerge destkey sourcekey [sourcekey…]
4)示例:
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> pfadd hll 001
(integer) 1
127.0.0.1:6379> pfadd hll 001
(integer) 0
127.0.0.1:6379> pfadd hll 001
(integer) 0
127.0.0.1:6379> pfadd hll 001
(integer) 0
127.0.0.1:6379> pfadd hll 001
(integer) 0
127.0.0.1:6379> pfadd hll 002
(integer) 1
127.0.0.1:6379> pfadd hll 002
(integer) 0
127.0.0.1:6379> pfcount hll
(integer) 2
5、redis 应用 场景:
1)redis 用于控制数据库表主键 id,为数据库表主键提供生成策略,保障数据库表的主键唯一性此方案适用于所有数据库,且支持数据库集群。
2)redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作。
3)redis 可应用于各种结构型和非结构型高热度数据访问加速。
4)redis 应用于购物车数据存储设计。
5)redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6)redis 应用于具有操作先后顺序的数据控制。
7)redis 应用于最新消息展示。
8)redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐大V推荐等。
9)set 类型数据的扩展操作:
- redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索。
- 显示共同关注(一度)。
- 显示共同好友(一度)。
- 由用户A出发,获取到好友用户B的好友信息列表(一度)。
- 由用户A出发,获取到好友用户B的购物清单列表(二度)。
- 由用户A出发,获取到好友用户B的游戏充值列表(二度)。
10)redis 应用于同类型不重复数据的合并操作。
11)redis 应用于同类型数据的快速去重。
12)redis 应用于基于黑名单与白名单设定的服务控制。
13)redis 应用于计数器组合排序功能对应的排名。in
14)redis 应用于定时任务执行顺序管理或任务过期管理。
15)redis 应用于即时任务/消息队列执行管理。
16)redis 应用于限时按次结算的服务控制。
17)redis 应用于基于时间顺序的数据操作,而不关注具体时间。
18)redis 应用基于状态控制的批量任务执行.
19)redis 应用基于分布式锁对应的场景控制。
20) 导入并加载指定配置文件信息,用于快速创建 redis 公共配置较多的 redis 实例配置文件,便于维护。
21)redis 应用于信息状态统计。
22)redis 应用于独立信息统计。
6、HyperLogLog 相关说明
- 用于进行基数统计,不是集合,不保存数据,只记录数量而不是具体数据。
- 核心是基数估算算法,最终数值存在一定误差。
- 误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值。
- 耗空间极小,每个 hyperloglog key 占用了 12K 的内存用于标记基数。
- pfadd 命令不是一次性分配12K内存使用,会随着基数的增加内存逐渐增大。
- Pfmerge 命令合并后占用的存储空间为 12K,无论合并之前数据量多少。
五、redis 高级数据类型–GEO
1、GEO 类型的基本操作
1)添加坐标点:geoadd key longitude latitude member [longitude latitude member …]
2)获取坐标点:geopos key member [member …]
3)计算坐标点距离:geodist key member1 member2 [unit]
2、GEO类型的基本操作
1)添加坐标点:
georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
2)获取坐标点:
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
3)计算经纬度:
geohash key member [member ...]
3、示例:
# 清空数据
127.0.0.1:6379> flushall
OK# 定义坐标数据
127.0.0.1:6379> geoadd geos 1 1 a
(integer) 1
127.0.0.1:6379> geoadd geos 2 2 b
(integer) 1# 取出 a 点
127.0.0.1:6379> geopos geos a
1) 1) "0.99999994039535522"2) "0.99999945914297683"# 计算 a 坐标到 b 坐标的距离
127.0.0.1:6379> geodist geos a b
"157270.0561"# 计算 a 坐标到 b 坐标的距离(以‘米’ 为单位)
127.0.0.1:6379> geodist geos a b m
"157270.0561"# 计算 a 坐标到 b 坐标的距离(以“千米” 为单位)
127.0.0.1:6379> geodist geos a b km
"157.2701"# 创建坐标点(田字格)
127.0.0.1:6379> geoadd geos 1 1 1,1
(integer) 1
127.0.0.1:6379> geoadd geos 1 2 1,2
(integer) 1
127.0.0.1:6379> geoadd geos 1 3 1,3
(integer) 1
127.0.0.1:6379> geoadd geos 2 1 2,1
(integer) 1
127.0.0.1:6379> geoadd geos 2 2 2,2
(integer) 1
127.0.0.1:6379> geoadd geos 2 3 2,3
(integer) 1
127.0.0.1:6379> geoadd geos 3 1 3,1
(integer) 1
127.0.0.1:6379> geoadd geos 3 2 3,2
(integer) 1
127.0.0.1:6379> geoadd geos 3 3 3,3
(integer) 1
127.0.0.1:6379> geoadd geos 5 5 5,5
(integer) 1# 统计 2,2 这个点周围 180km 范围内的 点
127.0.0.1:6379> georadiusbymember geos 2,2 180 km
1) "1,1"
2) "2,1"
3) "1,2"
4) "2,2"
5) "3,1"
6) "3,2"
7) "1,3"
8) "2,3"
9) "3,3"# 统计 2,2 这个点周围 120km 范围内的 点
127.0.0.1:6379> georadiusbymember geos 2,2 120 km
1) "1,2"
2) "2,2"
3) "2,3"
4) "2,1"
5) "3,2"# 统计 2,2 这个点周围 1800km 范围内的 点
127.0.0.1:6379> georadiusbymember geos 2,2 1800 km1) "1,1"2) "2,1"3) "1,2"4) "2,2"5) "3,1"6) "3,2"7) "1,3"8) "2,3"9) "3,3"
10) "5,5"# 统计 经纬度 1.5 1.5 这个点周围 90km 范围内的 点
127.0.0.1:6379> georadius geos 1.5 1.5 90 km
1) "1,2"
2) "2,2"
3) "1,1"
4) "2,1"# 统计 2,2 这个点 的 hash 值。
127.0.0.1:6379> geohash geos 2,2
1) "s037ms06g70"
4、redis 应用 场景:
1)redis 用于控制数据库表主键 id,为数据库表主键提供生成策略,保障数据库表的主键唯一性此方案适用于所有数据库,且支持数据库集群。
2)redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作。
3)redis 可应用于各种结构型和非结构型高热度数据访问加速。
4)redis 应用于购物车数据存储设计。
5)redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6)redis 应用于具有操作先后顺序的数据控制。
7)redis 应用于最新消息展示。
8)redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐大V推荐等。
9)set 类型数据的扩展操作:
- redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索。
- 显示共同关注(一度)。
- 显示共同好友(一度)。
- 由用户A出发,获取到好友用户B的好友信息列表(一度)。
- 由用户A出发,获取到好友用户B的购物清单列表(二度)。
- 由用户A出发,获取到好友用户B的游戏充值列表(二度)。
10)redis 应用于同类型不重复数据的合并操作。
11)redis 应用于同类型数据的快速去重。
12)redis 应用于基于黑名单与白名单设定的服务控制。
13)redis 应用于计数器组合排序功能对应的排名。in
14)redis 应用于定时任务执行顺序管理或任务过期管理。
15)redis 应用于即时任务/消息队列执行管理。
16)redis 应用于限时按次结算的服务控制。
17)redis 应用于基于时间顺序的数据操作,而不关注具体时间。
18)redis 应用基于状态控制的批量任务执行.
19)redis 应用基于分布式锁对应的场景控制。
20) 导入并加载指定配置文件信息,用于快速创建 redis 公共配置较多的 redis 实例配置文件,便于维护。
21)redis 应用于信息状态统计。
22)redis 应用于独立信息统计。
23)redis 应用于地理位置计算。
上一节关联链接请点击:
# Redis 入门到精通(七)-- redis 删除策略