Redis JSON介绍和命令大全

Redis JSON介绍和命令大全

  • Redis JSON
    • 先说说`JSON`是什么
    • 再说说`JSON Path`
      • 先推荐两个网站
      • `JSONPath JAVA clents`
    • `Redis JSON` 安装
    • 内存
    • json命令语法
      • 命令url
      • 命令解释
          • `JSON.ARRAPPEND`
          • `JSON.ARRINDEX`
          • `JSON.ARRINSERT`
          • `JSON.ARRLEN`
          • `JSON.ARRPOP`
          • `JSON.ARRTRIM`
          • `JSON.CLEAR`
          • `JSON.DEBUG MEMORY`
          • `JSON.DEBUG`
          • `JSON.DEL`
          • `JSON.FORGET`
          • `JSON.GET`
          • `JSON.MERGE`
          • `JSON.MGET`
          • `JSON.MSET`
          • `JSON.NUMINCRBY`
          • `JSON.OBJKEYS`
          • `JSON.OBJLEN`
          • `JSON.SET`
          • `JSON.STRAPPEND`
          • `JSON.STRLEN`
          • `JSON.TOGGLE`
          • `JSON.TYPE`
    • `redis json`的`clients`
    • `redis json`的使用场景 https://redis.io/docs/latest/develop/data-types/json/use_cases/

Redis JSON

redis在6.x开始支持json
注意:json可以说是在http接口返回值的网红,之所以说是网红,是因为之前不是json,之后当然也就未可知也。
注意我上面只说了在http接口返回值的场景。实际上在内部的rpc调用,也有用json传输的,不过这比较小众。
更多使用在存储数据场景下,也是泛滥的场景,如mysql、es、mongodb、redis中,json似乎包罗万象了。
⚠️注意!这不是好事,灵活性的提升必定伴随着其他如规范性、稳定性等问题的到来,
如果还没有到来,那肯定是时间还不够长、业务还没有增长。

redis官网介绍 https://redis.io/docs/latest/develop/data-types/json/

先说说JSON是什么

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

再说说JSON Path

JSONPath是一种用于从JSON文档中提取信息的查询语言,类似于XML的XPath。

先推荐两个网站

JsonPath语法 https://goessner.net/articles/JsonPath/
JsonPath在线 https://jsonpath.com/
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

JSONPath JAVA clents

<dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.7.0</version> <!-- 请检查是否有更新的版本 -->
</dependency>

Redis JSON 安装

  1. 使用redis-stack
    docker run -it --name redis-stack -p 6379:6379 redis/redis-stack:latest
  2. 使用redis 6.x及以上,配置loadMoudle
    本文使用redis-stack,如下图,可以看到启动的时候自动加载了json模块,
    除此之外还有timeseries、search等模块

在这里插入图片描述

内存

官网内存 https://redis.io/docs/latest/develop/data-types/json/ram/
在这里插入图片描述
可以看到json的内存还是挺恐怖的,哈哈哈,用不上还是用string吧…
keyvalue都占用内存

json命令语法

json命令大全 https://redis.io/docs/latest/commands/?group=json
在这里插入图片描述

命令url

indexcommandurl
0JSON.ARRAPPENDhttps://redis.io/docs/latest/commands/json.arrappend/
1JSON.ARRINDEXhttps://redis.io/docs/latest/commands/json.arrindex/
2JSON.ARRINSERThttps://redis.io/docs/latest/commands/json.arrinsert/
3JSON.ARRLENhttps://redis.io/docs/latest/commands/json.arrlen/
4JSON.ARRPOPhttps://redis.io/docs/latest/commands/json.arrpop/
5JSON.ARRTRIMhttps://redis.io/docs/latest/commands/json.arrtrim/
6JSON.CLEARhttps://redis.io/docs/latest/commands/json.clear/
7JSON.DEBUGhttps://redis.io/docs/latest/commands/json.debug/
8JSON.DEBUG MEMORYhttps://redis.io/docs/latest/commands/json.debug-memory/
9JSON.DELhttps://redis.io/docs/latest/commands/json.del/
10JSON.FORGEThttps://redis.io/docs/latest/commands/json.forget/
11JSON.GEThttps://redis.io/docs/latest/commands/json.get/
12JSON.MERGEhttps://redis.io/docs/latest/commands/json.merge/
13JSON.MGEThttps://redis.io/docs/latest/commands/json.mget/
14JSON.MSEThttps://redis.io/docs/latest/commands/json.mset/
15JSON.NUMINCRBYhttps://redis.io/docs/latest/commands/json.numincrby/
16JSON.NUMMULTBYhttps://redis.io/docs/latest/commands/json.nummultby/
17JSON.OBJKEYShttps://redis.io/docs/latest/commands/json.objkeys/
18JSON.OBJLENhttps://redis.io/docs/latest/commands/json.objlen/
19JSON.RESPhttps://redis.io/docs/latest/commands/json.resp/
20JSON.SEThttps://redis.io/docs/latest/commands/json.set/
21JSON.STRAPPENDhttps://redis.io/docs/latest/commands/json.strappend/
22JSON.STRLENhttps://redis.io/docs/latest/commands/json.strlen/
23JSON.TOGGLEhttps://redis.io/docs/latest/commands/json.toggle/
24JSON.TYPEhttps://redis.io/docs/latest/commands/json.type/

命令解释

JSON.ARRAPPEND
commandJSON.ARRAPPEND
syntaxJSON.ARRAPPEND key [path] value [value ...]
description

Append the json values into the array at path after the last element in it

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.arrappend/
JSON.ARRINDEX
commandJSON.ARRINDEX
syntaxJSON.ARRINDEX key path value [start [stop]]
description

Search for the first occurrence of a JSON value in an array

time complexityO(N) when path is evaluated to a single value where N is the size of the array, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.arrindex/
JSON.ARRINSERT
commandJSON.ARRINSERT
syntaxJSON.ARRINSERT key path index value [value ...]
description

Insert the json values into the array at path before the index (shifts to the right)

time complexityO(N) when path is evaluated to a single value where N is the size of the array, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.arrinsert/
JSON.ARRLEN
commandJSON.ARRLEN
syntaxJSON.ARRLEN key [path]
description

Report the length of the JSON array at path in key

time complexityO(1) where path is evaluated to a single value, O(N) where path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.arrlen/
JSON.ARRPOP
commandJSON.ARRPOP
syntaxJSON.ARRPOP key [path [index]]
description

Remove and return an element from the index in the array

time complexityO(N) when path is evaluated to a single value where N is the size of the array and the specified index is not the last element, O(1) when path is evaluated to a single value and the specified index is the last element, or O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.arrpop/
JSON.ARRTRIM
commandJSON.ARRTRIM
syntaxJSON.ARRTRIM key path start stop
description

Trim an array so that it contains only the specified inclusive range of elements

time complexityO(N) when path is evaluated to a single value where N is the size of the array, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.arrtrim/
JSON.CLEAR
commandJSON.CLEAR
syntaxJSON.CLEAR key [path]
description

Clear container values (arrays/objects) and set numeric values to 0

time complexityO(N) when path is evaluated to a single value where N is the size of the values, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 2.0.0
urlhttps://redis.io/docs/latest/commands/json.clear/
JSON.DEBUG MEMORY
commandJSON.DEBUG MEMORY
syntaxJSON.DEBUG MEMORY key [path]
description

Report a value’s memory usage in bytes

time complexityO(N) when path is evaluated to a single value, where N is the size of the value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.debug-memory/
JSON.DEBUG
commandJSON.DEBUG
syntaxJSON.DEBUG
description

This is a container command for debugging related tasks.

time complexityN/A
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.debug/
JSON.DEL
commandJSON.DEL
syntaxJSON.DEL key [path]
description

Delete a value

time complexityO(N) when path is evaluated to a single value where N is the size of the deleted value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.del/
JSON.FORGET
commandJSON.FORGET
syntaxJSON.FORGET key [path]
description

See JSON.DEL.

time complexityO(N) when path is evaluated to a single value where N is the size of the deleted value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.forget/
JSON.GET
commandJSON.GET
syntaxJSON.GET key [INDENTÂ indent] [NEWLINEÂ newline] [SPACEÂ space] [path [path ...]]
description

Return the value at path in JSON serialized form

time complexityO(N) when path is evaluated to a single value where N is the size of the value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.get/
JSON.MERGE
commandJSON.MERGE
syntaxJSON.MERGE key path value
description

Merge a given JSON value into matching paths. Consequently, JSON values at matching paths are updated, deleted, or expanded with new children.

time complexityO(M+N) when path is evaluated to a single value where M is the size of the original value (if it exists) and N is the size of the new value, O(M+N) when path is evaluated to multiple values where M is the size of the key and N is the size of the new value * the number of original values in the key
available inRedis Stack / JSON 2.6.0
urlhttps://redis.io/docs/latest/commands/json.merge/
JSON.MGET
commandJSON.MGET
syntaxJSON.MGET key [key ...] path
description

Return the values at path from multiple key arguments

time complexityO(M*N) when path is evaluated to a single value where M is the number of keys and N is the size of the value, O(N1+N2+…+Nm) when path is evaluated to multiple values where m is the number of keys and Ni is the size of the i-th key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.mget/
JSON.MSET
commandJSON.MSET
syntaxJSON.MSET key path value [key path value ...]
description

Set or update one or more JSON values according to the specified key-path-value triplets

time complexityO(K*(M+N)) where k is the number of keys in the command, when path is evaluated to a single value where M is the size of the original value (if it exists) and N is the size of the new value, or O(K*(M+N)) when path is evaluated to multiple values where M is the size of the key and N is the size of the new value * the number of original values in the key
available inRedis Stack / JSON 2.6.0
urlhttps://redis.io/docs/latest/commands/json.mset/
JSON.NUMINCRBY
commandJSON.NUMINCRBY
syntaxJSON.NUMINCRBY key path value
description

Increment the number value stored at path by number

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.numincrby/
JSON.OBJKEYS
commandJSON.OBJKEYS
syntaxJSON.OBJKEYS key [path]
description

Return the keys in the object that’s referenced by path

time complexityO(N) when path is evaluated to a single value, where N is the number of keys in the object, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.objkeys/
JSON.OBJLEN
commandJSON.OBJLEN
syntaxJSON.OBJLEN key [path]
description

Report the number of keys in the JSON object at path in key

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.objlen/
JSON.SET
commandJSON.SET
syntaxJSON.SET key path value [NX | XX]
description

Set the JSON value at path in key

time complexityO(M+N) when path is evaluated to a single value where M is the size of the original value (if it exists) and N is the size of the new value, O(M+N) when path is evaluated to multiple values where M is the size of the key and N is the size of the new value * the number of original values in the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.set/
JSON.STRAPPEND
commandJSON.STRAPPEND
syntaxJSON.STRAPPEND key [path] value
description

Append the json-string values to the string at path

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.strappend/
JSON.STRLEN
commandJSON.STRLEN
syntaxJSON.STRLEN key [path]
description

Report the length of the JSON String at path in key

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.strlen/
JSON.TOGGLE
commandJSON.TOGGLE
syntaxJSON.TOGGLE key path
description

Toggle a Boolean value stored at path

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 2.0.0
urlhttps://redis.io/docs/latest/commands/json.toggle/
JSON.TYPE
commandJSON.TYPE
syntaxJSON.TYPE key [path]
description

Report the type of JSON value at path

time complexityO(1) when path is evaluated to a single value, O(N) when path is evaluated to multiple values, where N is the size of the key
available inRedis Stack / JSON 1.0.0
urlhttps://redis.io/docs/latest/commands/json.type/

  • JSON.ARRAPPEND
127.0.0.1:6379> json.set blog $ '{"user":{"id":222078,"nick":"TOM"},"id":1000,"content":"一起学习redis json吧","delete":false,"like":300,"tags":["redis","json"]}'
127.0.0.1:6379> json.arrappend blog $.tags '"backend"' '"midware"'
4
127.0.0.1:6379> json.get blog INDENT "\t" NEWLINE "\n" SPACE " " $
[{"user": {"id": 222078,"nick": "TOM"},"id": 1000,"content": "一起学习redis json吧","delete": false,"like": 300,"tags": ["redis","json","backend","midware"]}
]
127.0.0.1:6379> 
  • JSON.ARRINSERT
  • JSON.STRAPPEND

  • JSON.ARRPOP
  • JSON.ARRTRIM
  • JSON.CLEAR
  • JSON.DEL
  • JSON.FORGET

  • JSON.SET
  • JSON.MSET
  • JSON.NUMINCRBY
  • JSON.NUMMULTBY
  • JSON.MERGE
  • JSON.TOGGLE

  • JSON.ARRLEN
  • JSON.ARRINDEX
    127.0.0.1:6379> JSON.SET tom $ '["black","silver"]'
    OK
    127.0.0.1:6379>
    127.0.0.1:6379>
    127.0.0.1:6379>
    127.0.0.1:6379> JSON.ARRINDEX tom $ '"black"'
    1) (integer) 0127.0.0.1:6379> JSON.ARRINDEX tom $ '"silver"'
    1) (integer) 1
    
  • JSON.DEBUG
  • JSON.DEBUG MEMORY
  • JSON.GET
  • JSON.MGET
  • JSON.OBJKEYS
  • JSON.OBJLEN
  • JSON.RESP (deprecated)
  • JSON.STRLEN
  • JSON.TYPE

redis jsonclients

https://github.com/RedisJSON/RedisJSON?tab=readme-ov-file

redis json的使用场景 https://redis.io/docs/latest/develop/data-types/json/use_cases/

  • 从json中查询或搜索
  • 原子部分更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454666.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centOS部署Jenkins实现项目可持续自动化部署

个人看的是尚硅谷的视频&#xff0c;跟着实战&#xff0c;但因为视频是21年的&#xff0c;所以很容易出现jenkins插件不适配问题。 因而个人直接用较新版的jdk和jenkins. 先切换到root用户 sudo su一、安装jdk 先查询可安装版本 yum list java*安装jdk&#xff08;只复制圈…

【算法】归并排序概念及例题运用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

爬虫日常实战

爬取美团新闻信息&#xff0c;此处采用两种方法实现&#xff1a; 注意点&#xff1a;因为此处的数据都是动态数据&#xff0c;所以一定要考虑好向下滑动数据包会更新的情况&#xff0c;不然就只能读取当前页即第一页数据&#xff0c;方法一通过更新ajax数据包网址页数&#xf…

vscode 预览markdown 文件

1. 点击左边扩展 2. 搜索“Markdown Preview Enhanced” 3. 选第一个安装即可 4. 重启vscode 5. 打开一个markdown 文件 6. 点击右上角的预览按钮

[mysql]mysql的全部单行函数

单行函数 几乎我们认识的语言都会对一些常用的功能进行,封装,有些叫函数,有些叫方法(Java),后期我们还可以自定义函数. 现在我们就当大家是没有语言基础,我们来从头开始讲.不过大家肯定接触过,中学说的函数,yf(x)f代表的就是function的缩写,这里其y2x1fx代表的就是封装的内容…

FileLink内外网文件交换——致力企业高效安全文件共享

随着数字化转型的推进&#xff0c;企业之间的文件交流需求日益增加。然而&#xff0c;传统的文件传输方式往往无法满足速度和安全性的双重要求。FileLink作为一款专注于跨网文件交换的工具&#xff0c;致力于为企业提供高效、安全的文件共享解决方案。 应用场景一&#xff1a;项…

C++大沥2019年真题——数字圈

Hi&#xff01;大家好&#xff01;Im#张亿&#xff0c;今天来讲C大沥2019年真题——数字圈 题目描述 当我们写数字时会发现有些数字有封闭区域&#xff0c;有的数字没有封闭区域。 数字 0 有一个封闭区域&#xff0c;数字 1、2、 3 都没有封闭区域&#xff0c;数字 4 有一个封…

word中的内容旋转90度

在vsto、Aspose.Words 中&#xff0c;默认没有直接的 API 可以让表格整体旋转 90 度。然而&#xff0c;我们可以通过一些方式来实现类似的效果&#xff0c;具体思路如下&#xff1a; 将表格插入到一个形状&#xff08;Shape&#xff09;或文本框中&#xff0c;然后旋转该形状。…

《RECONX: RECONSTRUCT ANY SCENE FROM SPARSEVIEWS WITH VIDEO DIFFUSION MODEL》论文阅读

论文地址&#xff1a;https://arxiv.org/pdf/2408.16767 项目地址&#xff1a;GitHub - liuff19/ReconX: ReconX: Reconstruct Any Scene from Sparse Views with Video Diffusion Model ---------------------------------------------------------------------------------…

2019年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;OSI参考模型第5层完成的功能 首先&#xff0c;我们需要对OSI参考模型很熟悉&#xff1a;从下到上依次是&#xff1a;物理层-数据链路层-网络层- 运输层-会话层-表示层-应用层&#xff0c;由此可知&#xff0c;题目要问的是会话层的主要功能…

什么是感知与计算融合?

感知与计算融合&#xff08;Perception-Computing Fusion&#xff09;是指将感知技术&#xff08;如传感器、摄像头等&#xff09;与计算技术&#xff08;如数据处理、人工智能等&#xff09;有机结合&#xff0c;以实现对环境的更深层次理解和智能反应的过程。该技术广泛应用于…

基于SSM品牌银饰售卖系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;促销活动管理&#xff0c;饰品管理&#xff0c;我的收藏管理&#xff0c;系统管理&#xff0c;订单管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;…

新书速览|Android智能座舱开发:从源码到实践

《Android智能座舱开发:从源码到实践》 本书内容 《Android智能座舱开发:从源码到实践》是一本专注于Android智能座舱系统开发与优化的实战指南。《Android智能座舱开发:从源码到实践》共9章&#xff0c;第1章从搭建源码编译环境开始&#xff0c;详细指导读者如何下载和编译An…

活体人脸识别技术总结及实践

文章目录 1、背景2、人脸反伪装技术2.1 活体人脸识别常见模式2.2 学术上反伪装研究 3、工程实现3.1 Silent-Face3.2 Silent-Face模型转rknn3.3 Silent-Face模型的限制 1、背景 1.1 什么是活体检测&#xff1f; 在人脸识别之前&#xff0c;先判断一下屏幕前摄像头捕捉到的人脸是…

深度解析RLS(Recursive Least Squares)算法

目录 一、引言二、RLS算法的基本思想三、RLS算法的数学推导四、RLS算法的特点五、RLS算法的应用场景六、RLS算法的局限性七、总结 一、引言 在自适应滤波领域&#xff0c;LMS&#xff08;Least Mean Squares&#xff09;算法因其计算简单、实现方便而广受欢迎。然而&#xff0…

【leetcode|哈希表、动态规划】最长连续序列、最大子数组和

目录 最长连续序列 解法一&#xff1a;暴力枚举 复杂度 解法二&#xff1a;优化解法一省去二层循环中不必要的遍历 复杂度 最大子数组和 解法一&#xff1a;暴力枚举 复杂度 解法二&#xff1a;贪心 复杂度 解法三&#xff1a;动态规划 复杂度 最长连续序列 输入输…

【数据结构与算法】时间、空间复杂度详解

大家有没有遇到过&#xff0c;为什么有些程序跑得飞快&#xff0c;而有些程序却慢得让人抓狂&#xff1f;我们可能都是这样认为的&#xff1a;他写的程序效率高等等&#xff0c;确实如此。但这背后隐藏着两个重要的概念&#xff1a;时间复杂度和空间复杂度。它们就像程序的“效…

算法题总结(十九)——图论

图论 DFS框架 void dfs(参数) { if (终止条件) {存放结果;return; }for (选择&#xff1a;本节点所连接的其他节点) {处理节点;dfs(图&#xff0c;选择的节点); // 递归回溯&#xff0c;撤销处理结果 } }深搜三部曲 确认递归函数&#xff0c;参数确认终止条件处理目前搜索节…

Windows系统启动MongoDB报错无法连接服务器

文章目录 发现问题解决办法 发现问题 1&#xff09;、先是发现执行 mongo 命令&#xff0c;启动报错&#xff1a; error: MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017&#xff1b; 2&#xff09;、再检查 MongoDB 进程 tasklist | findstr mongo 发现没有进程&a…

爬虫基础--requests模块

1、requests模块的认识 requests模块的认识请跳转到 requests请求库使用_使用requests库-CSDN博客 2、爬取数据 这里我们以b站动漫追番人数为例。 首先进去b站官网 鼠标右键点击检查或者键盘的F12&#xff0c;进入开发者模式。&#xff08;这里我使用的是谷歌浏览器为例&#…