# Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型

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 算法:

59-LogLog算法.png

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 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"
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 删除策略

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段子手-168

你的鼓励将是我你的创作最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值