3.0二、redis.conf配置文件

# 一、引入其它配置文件。好比说当你有多个server,而有一些配置项是它们公用的,
# 那么你能够将这些公用的配置项写进一个配置文件common.conf里,而后这些server再include这个配置文件
# 这些server本身的配置项则分别写在本身的配置文件里
#
# include /path/to/local.confnode

# 二、启动时加载模块,若是server没法加载模块,则此配置会被忽略。可使用多个loadmodule
#
# loadmodule /path/to/my_module.soredis

# 三、默认状况下,redis 在 server 上全部有效的网络接口上监听客户端链接。
# 若是只想让它在一个或多个网络接口上监听,那你就绑定一个IP或者多个IP。多个ip空格分隔便可。
#
bind 127.0.0.1算法

# 四、当开启后,禁止公网访问redis。
# 它启用的条件有两个,第一是没有使用bind,第二是没有设置访问密码
#
protected-mode yes数据库

# 五、指定该redis server监听的端口号。默认是6379,若是指定0则不监听
#
port 6379缓存

# 六、此参数肯定了TCP链接中已完成队列(完成三次握手以后)的长度,
#   固然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128
#   当系统并发量大而且客户端速度缓慢的时候,能够将这二个参数一块儿参考设定
#
tcp-backlog 511安全

# 七、指定 unix socket 的路径
#
# unixsocket /tmp/redis.sock服务器

# 八、指定 unix socket file 的权限
#
# unixsocketperm 700网络

# 九、当客户端闲置多少秒后关闭链接,若是设置为0表示关闭该功能
#
timeout 0数据结构

# 十、单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态
#    避免服务器一直阻塞,官方给出的建议值是300s
#
tcp-keepalive 300架构

# 十一、是否以守护模式启动,默认为no
#     配置为yes时以守护模式启动,这时redis instance会将进程号pid写入默认文件/var/run/redis.pid
#
daemonize no

# 十二、能够经过upstart和systemd管理Redis守护进程,这个参数是和具体的操做系统相关的
#
supervised no

# 1三、配置pid文件路径
#    当redis以守护模式启动时,若是没有配置pidfile,pidfile默认值是/var/run/redis.pid
#
pidfile /var/run/redis_6379.pid

# 1四、日志级别
#      可选项有:
#         debug(记录大量日志信息,适用于开发、测试阶段)
#         verbose(较多日志信息)
#         notice(适量日志信息,使用于生产环境)
#         warning(仅有部分重要、关键信息才会被记录)
#
loglevel notice

# 1五、日志文件的位置,当指定为空字符串时,为标准输出
#      若是redis已守护进程模式运行,那么日志将会输出到 /dev/null
#
logfile ""

# 1六、是否把日志记录到系统日志
#
# syslog-enabled no

# 1七、设置系统日志的id
#
# syslog-ident redis

# 1八、指定syslog设备(facility),必须是user或则local0到local7
#
# syslog-facility local0

# 1九、设置数据库的数目。默认的数据库是DB 0 ,能够在每一个链接上使用select命令选择一个不一样的数据库
#      dbid是一个介于0到databases - 1 之间的数值
#
databases 16

# 20、是否老是显示redis的logo
#
always-show-logo yes

# 2一、保存数据到磁盘
#    格式是:save seconds changes
#     含义是在 seconds 秒以后至少有 changes个keys 发生改变则保存一次
#
save 900 1
save 300 10
save 60 10000

# 2二、默认状况下,若是 redis 最后一次的后台保存失败,redis 将中止接受写操做
#      这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, 不然就会没人注意到灾难的发生
#      若是后台保存进程从新启动工做了,redis 也将自动的容许写操做
#    要是安装了靠谱的监控,你可能不但愿 redis 这样作,那你就改为 no 好了
#
stop-writes-on-bgsave-error yes

# 2三、是否在dump .rdb数据库的时候压缩字符串,默认设置为yes
#    若是你想节约一些cpu资源的话,能够把它设置为no,这样的话数据集就可能会比较大
#
rdbcompression yes

# 2四、是否CRC64校验rdb文件,会有必定的性能损失(大概10%)
#
rdbchecksum yes

# 2五、rdb文件的名字
#
dbfilename dump.rdb

# 2六、数据库存放目录。必须是一个目录,aof文件也会保存到该目录下
#
dir ./

# 2七、Master-Replica 复制。使用replicaof将一个Redis的实例做为另外Redis服务器的副本。
#      1).Redis复制是异步的, 可是你能够配置一个主服务器来中止接受写操做
#    2).若是复制连接丢失的时间相对较短,Redis副本可以与主服务器执行部分从新同步
#     3).复制是自动的,不须要用户来参与。在网络分区以后,副本自动尝试从新链接到主服务器并与它们从新同步
#
# replicaof <masterip> <masterport>

# 2八、当master服务设置了密码保护时,slav服务链接master的密码
#
# masterauth <master-password>

# 2九、当副本丢失与主服务器的链接,或者当复制仍在进行时,副本能够以两种不一样的方式运行:
#      1).默认值yes,副本仍会响应客户端请求,多是数据过时,或者若是这是第一次同步,数据集可能只是空的
#     2).设置为no,那么该副本将会对全部类型的命令作出错误的响应,"SYNC with master in progress"
#         可是对INFO、replicaOF、AUTH、PING、SHUTDOWN、 REPLCONF、ROLE、CONFIG、SUBSCRIBE、
#        UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE、 PUBLISH、PUBSUB、COMMAND、POST、HOST:和LATENCY进行同步
#
replica-serve-stale-data yes

# 30、配置一个副本实例来接受写操做或者不接受写操做
#     默认:yes
#
replica-read-only yes

# 3一、主从数据复制是否使用无硬盘复制功能
#     默认:no
#
repl-diskless-sync no

# 3二、当使用无磁盘复制时,能够配置服务器等待的延迟,以便生成经过套接字将RDB传输到副本的子节点
#     延迟单位指定以秒为单位,默认的为5秒。要彻底禁用它,只需将它设置为0秒,传输将尽快完成
#
repl-diskless-sync-delay 5

# 3三、副本按预先定义好的时间间隔向主服务器发送pings命令
#      默认:10s
#
# repl-ping-replica-period 10

# 3四、设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒
#
# repl-timeout 60

# 3五、指定向slave同步数据时,是否禁用socket的NO_DELAY选 项
#     1).若为"yes",则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,
#       这样能够减小主从节点间的包数量并节省带宽,但会增长数据同步到 slave的时间
#      2).默认"no",代表启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机
#         这样数据同步的延时会减小,但须要更大的带宽
#
repl-disable-tcp-nodelay no

# 3六、设置主从复制backlog容量大小
# 这个 backlog 是一个用来在 slaves 被断开链接时存放 slave 数据的 buffer
# 因此当一个 slave 想要从新链接,一般不但愿所有从新同步,只是部分同步就够了
# 仅仅传递 slave 在断开链接时丢失的这部分数据。这个值越大,salve 能够断开链接的时间就越长
#
# repl-backlog-size 1mb

# 3七、配置当master和slave失去联系多少秒以后,清空backlog释放空间。当配置成0时,表示永远不清空
#
# repl-backlog-ttl 3600

# 3八、当master不能正常工做的时候,Redis Sentinel 会从 slaves 中选出一个新的master
#    这个值越小,就越会被优先选中
#      可是若是是 0 , 那是意味着这个 slave 不可能被选中。 默认优先级为 100
#
replica-priority 100

# 3九、若是链接的副本少于N个,而且延迟小于或等于M秒,则主服务器有可能中止接受写入操做
#      N个副本须要出于在线状态
#    以秒为单位的延迟(必须<=指定值)是根据从副本收到的最后一次ping计算的,一般每秒发送一次
#     此选项不能保证n个副本将接受写入,但会将丢失写入的暴露时间限制在指定的秒数内,以防没有足够的副本可用
#
#    例如,要要求至少3个延迟<=10秒的副本,请使用:
#
# min-replicas-to-write 3
# min-replicas-max-lag 10
#
#      将其中一个或另外一个设置为0将禁用该特性
#
#      默认状况下,min- copy -to-write设置为0(禁用特性),min- copy -max-lag设置为10    

# 40、Redis主服务器可以以不一样方式列出附加副本的地址和端口
#      当使用端口转发或网络地址转换(NAT)时,副本实际上能够经过不一样的IP和端口访问
#      副本可使用一下两个选项向其主服务器报告一组特定的IP和端口,一遍INFo和ROLE都能报告这些值
#       若是只须要覆盖端口或IP地址,则不须要同时使用这两种选项
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234

# 4一、redis链接密码
#
# requirepass foobared

# 4二、将命令重命名。为了安全考虑,能够将某些重要的、危险的命令重命名
#     当你把某个命令重命名成空字符串的时候就等于取消了这个命令
#
# rename-command CONFIG ""

# 4三、设置客户端最大并发链接数,默认无限制
#
# maxclients 10000

# 4四、指定Redis最大内存限制
#    Redis在启动时会把数据加载到内存中,达到最大内存后
#    Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置
#    将没法再进行写入操做但仍然能够进行读取操做
#    Redis新的vm机制,会把Key存放内存,Value会存放在swap区
#
# maxmemory <bytes>

# 4五、最大内存策略
# volatile-lru       -> 使用 LRU 算法移除包含过时设置的 key.
# allkeys-lru     -> 根据 LRU 算法移除全部的 key .
# volatile-lfu    -> 利用LFU算法移除设置过过时时间的key.
# allkeys-lfu     -> 利用LFU算法移除任何key.
# volatile-random -> 移除设置过过时时间的随机key.
# allkeys-random  -> 随机移除全部key.
# volatile-ttl       -> 移除即将过时的key
# noeviction      -> 不移除任何key,只是返回一个写错误,默认选项.
#
# maxmemory-policy noeviction

# 4六、设置每次移除时的样本大小
# 默认5个:每次移除时选取5个样本,移除其中符合策略的key
#
# maxmemory-samples 5

# 4七、是否从节点忽略maxmemory设置的值
#
# replica-ignore-maxmemory yes

# 4八、lazy free可译为惰性删除或延迟释放
#    当删除键的时候,redis提供异步延时释放key内存的功能,把key释放操做放在bio(Background I/O)单独的
#    子线程处理中,减小删除big key对redis主线程的阻塞。有效地避免删除big key带来的性能和可用性问题。
#      redis 4.0 新加了4个参数:
#     1).lazyfree-lazy-eviction   : 是否异步驱逐key,当内存达到上限,分配失败后
#    2).lazyfree-lazy-expire     : 是否异步进行key过时事件的处理
#      3).lazyfree-lazy-server-del : 是否异步进行删除操做,相似unlink
#      4).replica-lazy-flush          : replica client 作全同步的时候,是否异步flush本地db
#

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# 4九、是否开启AOF模式
#
appendonly no

# 50、保存数据的AOF文件名称
#
appendfilename "appendonly.aof"

# 5一、fsync()调用告诉操做系统将数据真实的写入磁盘而不是放到缓冲区中
#    redis支持3中不一样的模式:
#     1).no      :不及时同步,由操做系统控制什么时候刷写到磁盘上,这个模式速度最快
#      2).always  :每次只写日志,速度较慢,但最安全
#    3).everysec:每秒钟同步一次,折中方案,默认选项
#
appendfsync everysec

# 5二、当使用AOF的fsync方案设置为:"always"或"everysec"时,后台的存储进程会执行大量的磁盘I/O操做,
#    在一些Linux架构中,Redis在fsync()调用时可能会阻塞好久。这个问题当前并无修复,即便是在一个不一样的
#    线程执行fsync也将会阻塞咱们的同步写调用,为了缓解这个问题,可使用如下选项,它将会在有一个BGSAVE
#    或BGREWRITEAOF正在运行时,阻止主进程调用fsync().
#    这意味着有另外一个子进程在存储时,Redis的持久性等同于“appendfsync none”。
#    在实践中,意味着在最坏的状况下它可能丢失多达30秒的日志(默认的Linux设置)
#
#    若是你有潜在的问题须要更改它为“yes”。不然从持久性的观点来看“no”是最安全的选择
#
no-appendfsync-on-rewrite no

# 5三、自动重写append only文件
#    当AOF日志的大小根据指定的百分比增加时,Redis会暗中调用BGREWRITEAOF去自动重写日志文件
#
#    工做原理:Redis记忆AOF文件最后一次重写的大小(若是重启后没有重写发生,AOF的大小在启动时会被使用)。
#    基本大小对比当前大小。若是当前大小比指定的百分比大,触发重写.而且你要为AOF文件指定一个最小的尺寸去重写,
#    这对于避免重写AOF文件是有用的,即便达到了百分比增加率但它仍然是很是小的  
#    指定百分比为0以便禁用自动AOF重写
#
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# 5四、当AOF文件在redis启动过程当中被截断
#    默认设置yes,当截断的AOF文件被加载时,redis服务器启动发出一个日志告知用户这个事件
#    设置no,服务器会停止一个错误并拒绝启动
#
aof-load-truncated yes

# 5五、Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能以后,AOF重写产生的文件将同时
#    包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,
#    而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就能够同时兼有RDB持久化和
#    AOF持久化的优势(既可以快速地生成重写文件,也可以在出现问题时,快速地载入数据)
aof-use-rdb-preamble yes

# 5六、Redis提供了lua-time-limit参数限制脚本的最长运行时间
#    默认5秒
#    当脚本运行时间超过这一限制后,Redis将开始接受其余命令但不会执行(以确保脚本的原子性,由于此时脚本并无被终止),
#    而是会返回“BUSY”错误
lua-time-limit 5000

# 5七、是否开启集群
#
# cluster-enabled yes

# 5八、集群配置文件
#
# cluster-config-file nodes-6379.conf

# 5九、节点互连超时时间,毫秒为单位
#
# cluster-node-timeout 15000

# 60、在进行故障转移的时候所有slave都会请求申请为master,可是有些slave可能与master断开链接一段时间了致使数据过于陈旧,
#    不该该被提高为master。该参数就是用来判断slave节点与master断线的时间是否过长。
#    判断方法是:比较slave断开链接的时间和(node-timeout * slave-validity-factor)+ repl-ping-slave-period
#               若是节点超时时间为三十秒,而且slave-validity-factor为10,
#               假设默认的repl-ping-slave-period是10秒,即若是超过310秒slave将不会尝试进行故障转移。   
#
# cluster-replica-validity-factor 10

# 6一、master的slave数量大于该值,slave才能迁移到其余孤立master上,如这个参数被设为2,
#    那么只有当一个主节点拥有2个可工做的从节点时,它的一个从节点才会尝试迁移
#
# cluster-migration-barrier 1

# 6二、集群所有的slot有节点负责,集群状态才为ok并提供服务。设置为no能够在slot没有所有分配的时候提供服务。
#    不建议打开该配置,这样会形成分区的时候,小分区的master一直在接受写请求,而形成很长时间数据不一致
#
# cluster-require-full-coverage yes

# 6三、在主节点失效期间,从节点不容许对master失效转移
#
# cluster-replica-no-failover no

# 6四、默认状况下,Redis会自动检测本身的IP和从配置中获取绑定的PORT,告诉客户端或者是其余节点。
#    而在Docker环境中,若是使用的不是host网络模式,在容器内部的IP和PORT都是隔离的,
#    那么客户端和其余节点没法经过节点公布的IP和PORT创建链接
#
#    若是开启如下配置,Redis节点会将配置中的这些IP和PORT告知客户端或其余节点。
#    而这些IP和PORT是经过Docker转发到容器内的临时IP和PORT的
#
# cluster-announce-ip 10.1.1.5
# cluster-announce-port 6379
# cluster-announce-bus-port 6380

# 6五、执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slow-log记录
#    这里的单位是微秒,默认是 10ms
#
slowlog-log-slower-than 10000

# 6六、慢查询最大的条数,当slowlog超过设定的最大值后,会将最先的slowlog删除,是个FIFO队列
#
slowlog-max-len 128

# 6七、Redis延迟监视子系统在运行时对不一样的操做进行采样,以便收集可能致使延时的数据根源
#    经过LATENCY命令,能够打印图表并获取报告
#    系统仅记录在等于或大于 latency-monitor-threshold 指定的毫秒数的时间内执行的操做.
#    当其值设置为0时,将关闭延迟监视器.默认状况下,延迟监视被禁用,由于若是您没有延迟问题,
#    则一般不须要延迟监视,而且收集数据会对性能产生影响,虽然很是小.
#    若是须要,可使用命令“CONFIG SET latency-monitor-threshold <milliseconds>”在运行时轻松启用延迟监视
#
latency-monitor-threshold 0

# 6八、Redis能够向Pub / Sub客户端通知键空间发生的事件。  
#    若是启用了键空间事件通知,而且客户端对存储在数据库0中的键foo执行DEL操做,
#    则将经过Pub / Sub发布两条消息:
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
#
#    以 keyspace 为前缀的频道被称为键空间通知(key-space notification),
#    而以 keyevent 为前缀的频道则被称为键事件通知
#
#  K     键空间通知,全部通知以 __keyspace@<db>__ 为前缀.
#  E     键事件通知,全部通知以 __keyevent@<db>__ 为前缀.
#  g     DEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知
#  $     字符串命令的通知
#  l     列表命令的通知
#  s     集合命令的通知
#  h     哈希命令的通知
#  z     有序集合命令的通知
#  x     过时事件:每当有过时键被删除时发送
#  e     驱逐(evict)事件:每当有键由于 maxmemory 策略而被删除时发送
#  A     参数 g$lshzxe 的别名
#
#    输入的参数中至少要有一个 K 或者 E , 不然的话, 无论其他的参数是什么, 都不会有任何通知被分发
#    若是只想订阅键空间中和列表相关的通知, 那么参数就应该设为 Kl.
#    将参数设为字符串 "AKE" 表示发送全部类型的通知
#
notify-keyspace-events ""

# 6九、hash类型的数据结构在编码上可使用ziplist和hashtable。
#    ziplist的特色就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎同样
#    所以redis对hash类型默认采起ziplist。若是hash中条目个数或者value长度达到阀值,内部编码将使用hashtable
#    这个参数指的是ziplist中容许存储的最大条目个数,默认为512,建议为128
#    ziplist中容许条目value值最大字节数,默认为64,建议为1024
#
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# 70、当取正值的时候,表示按照数据项个数来限定每一个quicklist节点上的ziplist长度。
# 好比,当这个参数配置成5的时候,表示每一个quicklist节点的ziplist最多包含5个数据项
# 当取负值的时候,表示按照占用字节数来限定每一个quicklist节点上的ziplist长度。这时,它只能取-1到-5这五个值
# For a fixed maximum size, use -5 through -1, meaning:
# -5: max size: 64 Kb  <-- not recommended for normal workloads
# -4: max size: 32 Kb  <-- not recommended
# -3: max size: 16 Kb  <-- probably not recommended
# -2: max size: 8 Kb   <-- good
# -1: max size: 4 Kb   <-- good
# 性能最高的选项一般为-2(8 Kb大小)或-1(4 Kb大小)。
#
list-max-ziplist-size -2

# 7一、一个quicklist两端不被压缩的节点个数
#    参数list-compress-depth的取值含义以下:
#     0: 表示都不压缩。这是Redis的默认值
#     1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩
#     2:表示quicklist两端各有2个节点不压缩,中间的节点压缩
#     3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩
#
list-compress-depth 0

# 7二、数据量小于等于512用intset,大于512用set
#
set-max-intset-entries 512

# 7三、数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset
#
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# 7四、value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse)
#    大于hll-sparse-max-bytes使用稠密的数据结构(dense),一个比16000大的value是几乎没用的
#    建议的value大概为3000。若是对CPU要求不高,对空间要求较高的,建议设置到10000左右
#
hll-sparse-max-bytes 3000

# 7五、stream 的最大内存开销字节数
#
stream-node-max-bytes 4096
#    stream 的最大项数量
#
stream-node-max-entries 100

# 7六、指定是否激活重置哈希,默认为开启。对实时性要求高的,可更改成no,不开启
#
activerehashing yes

# 7七、客户端的输出缓冲区的限制,可用于强制断开那些由于某种缘由从服务器读取数据的速度不够快的客户端
#    (一个常见的缘由是一个发布/订阅客户端消费消息的速度没法遇上生产它们的速度)
#    能够对三种不一样的客户端设置不一样的限制:
#
# normal   -> 正常客户端
# replica  -> slave和 MONITOR 客户端
# pubsub   -> 至少订阅了一个pubsub channel或pattern的客户端
#
#  默认normal客户端不作限制,由于他们在不主动请求时不接收数据(以推的方式),只有异步客户端
#  可能会出现请求数据的速度比它能够读取的速度快的场景
#  pubsub和slave客户端会有一个默认值,由于订阅者和slaves以推的方式来接收数据
#  把硬限制和软限制都设置为0来禁用该功能
#
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# 7八、客户端查询缓存大小限制,若是multi/exec 大能够考虑调节
#
# client-query-buffer-limit 1gb

# 7九、批量请求的大小限制
#
# proto-max-bulk-len 512mb

# 80、调节可让redis再空闲时间更多的作一些任务(如关闭超时客户端等)
hz 10

# 8一、当启用动态赫兹时,实际配置的赫兹将用做做为基线,但实际配置的赫兹值的倍数
#    在链接更多客户端后根据须要使用。这样一个闲置的实例将占用不多的CPU时间,而繁忙的实例将反应更灵敏
#
dynamic-hz yes

# 8二、在aof重写的时候,若是打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync
#    这对于把文件写入磁盘是有帮助的,能够避免过大的延迟峰值
#
aof-rewrite-incremental-fsync yes

# 8三、RDB自动触发策略是否启用,默认为yes
#    在rdb保存的时候,若是打开了rdb-save-incremental-fsync开关,系统会每32MB执行一次fsync    
#    这对于把文件写入磁盘是有帮助的,能够避免过大的延迟峰值
#
rdb-save-incremental-fsync yes

# 8四、调整计数器的增加速度
# lfu-log-factor 10
# 是一个以分钟为单位的数值,能够调整counter的减小速度
# lfu-decay-time 1

# 8五、已启用活动碎片整理
#
# activedefrag yes

# 8六、启动活动碎片整理的最小碎片浪费量
#
# active-defrag-ignore-bytes 100mb

# 8七、启动活动碎片整理的最小碎片百分比
#
# active-defrag-threshold-lower 10

# 8八、咱们使用最大努力的最大碎片百分比
#
# active-defrag-threshold-upper 100

# 8九、以CPU百分比表示的碎片整理的最小工做量
#
# active-defrag-cycle-min 5

# 90、在CPU的百分比最大的努力和碎片整理
#
# active-defrag-cycle-max 75

# 9一、将从中处理的set/hash/zset/list字段的最大数目 # 主词典扫描 # # active-defrag-max-scan-fields 1000

相关文章
相关标签/搜索