当前位置: 首页 > news >正文

网站怎么做留言提交功能网站建设需要的人才

网站怎么做留言提交功能,网站建设需要的人才,软件工程有多难学,沈阳网站建设公司哪家好Redis 模块是Redis的高级功能#xff0c;允许我们实现特定的自定义数据类型。本质上#xff0c;模块是一个动态库#xff0c;可以在启动时或根据命令按需加载到 Redis 中 MODULE LOAD 。模块可以用多种语言编写#xff0c;包括 C 和 Rust。 我们自己使用 Redis 模块实现新…Redis 模块是Redis的高级功能允许我们实现特定的自定义数据类型。本质上模块是一个动态库可以在启动时或根据命令按需加载到 Redis 中 MODULE LOAD 。模块可以用多种语言编写包括 C 和 Rust。 我们自己使用 Redis 模块实现新的数据类型是一项艰巨的工作。值得庆幸的是有许多流行且广泛使用的模块可以解决全文搜索RediSearch、时间序列处理RedisTimeSeries和原生 JSON 支持RedisJSON等问题。让我们概述一下一些使用更广泛的 Redis 模块。 本节提供了 RediSearch、RedisJSON 和 RedisTimeSeries 模块的高级概述以及与它们相关的重要命令。 要完成本教程的这一部分您需要 安装最新版本的 Go 和 Docker。所有上述模块都作为Redis Stack的一部分提供 它将 Redis 与各种相关的软件包和服务捆绑在一起。您可以使用 Docker 启动 Redis Stack 本地实例  docker run -d --name redis-stack -p 6379:6379 redis/redis-stack:latest 在开始之前让我们创建一个 Go 模块来托管示例 go mod init go-redis-modules RedisJSON 在 Redis 中处理 JSON 数据时传统方法有其局限性。默认情况下Redis 将值视为简单字符串缺乏对查询或操作 JSON 等结构化数据的内置支持。因此开发人员经常将 JSON 存储为 字符串化 值从而牺牲了对各个字段执行高效操作或利用嵌套结构的能力。这种方法需要解析整个 JSON 文档即使是微小的更新导致效率低下并增加处理开销。 RedisJSON 模块通过向 Redis 引入本机 JSON 处理功能来解决这些挑战。它允许您像任何其他本机数据类型一样存储、更新和检索 JSON。 RedisJSON 提供了一组丰富的 JSON 文档操作。以下是一些最常用的命令 JSON.SET在 Redis 中设置 JSON 值。JSON.GET检索与给定键关联的 JSON 值。JSON.DEL从 Redis 中删除 JSON 值。JSON.TYPE返回JSON值的类型指示它是对象、数组、字符串、数字、布尔值还是null。JSON.ARRAPPEND将一个或多个值附加到 JSON 数组的末尾。JSON.ARRLEN返回 JSON 数组的长度提供其包含的元素数量。JSON.OBJKEYS检索 JSON 对象的键返回所有存在键的数组。JSON.OBJLEN返回JSON对象的大小。JSON.NUMINCRBY将 JSON 文档中的数值增加指定的量。JSON.STRAPPEND在 JSON 文档中附加字符串。 下面的示例演示了如何在 Go 应用程序中使用各种 RedisJSON 命令。请注意我们使用的是 go-redis 客户端。 package main import ( context errors fmt log github.com/redis/go-redis/v9 ) func main() { rdb : redis.NewClient(redis.Options{ Addr: localhost:6379, }) ctx : context.Background() // JSON.SET err : rdb.Do(ctx, JSON.SET, mydoc, ., {name:John,credits:30,cars:[honda,toyota]}).Err() if err ! nil { log.Fatal(err) } // JSON.GET val, err : rdb.Do(ctx, JSON.GET, mydoc).Result() if err ! nil { log.Fatal(err) } fmt.Println(JSON.GET result -, val) // JSON.ARRAPPEND _, err rdb.Do(ctx, JSON.ARRAPPEND, mydoc, .cars, audi).Int() if err ! nil { log.Fatal(err) } fmt.Println(added audi to list of cars using JSON.ARRAPPEND) // JSON.GET val, err rdb.Do(ctx, JSON.GET, mydoc).Result() if err ! nil { log.Fatal(err) } fmt.Println(lastest document, val) // JSON.NUMINCRBY _, err rdb.Do(ctx, JSON.NUMINCRBY, mydoc, .credits, 5).Result() if err ! nil { log.Fatal(err) } fmt.Println(incremented credits by 5 using JSON.NUMINCRBY) // JSON.STRAPPEND _, err rdb.Do(ctx, JSON.STRAPPEND, mydoc, .name, , Jr.).Int() if err ! nil { log.Fatal(err) } fmt.Println(updated name using JSON.STRAPPEND) // JSON.GET val, err rdb.Do(ctx, JSON.GET, mydoc).Result() if err ! nil { log.Fatal(err) } fmt.Println(latest document, val) // JSON.DEL _, err rdb.Do(ctx, JSON.DEL, mydoc).Int() if err ! nil { log.Fatal(err) } fmt.Println(deleted document using JSON.DEL) err rdb.Do(ctx, JSON.GET, mydoc).Err() if errors.Is(err, redis.Nil) { fmt.Println(document mydoc could not be found) } } 要运行上述代码请将其复制到名为的文件中 main.go 并执行以下命令 # get dependencies go get github.com/redis/go-redis/v9 # run program go run main.go 请注意我们不需要获取整个 JSON 文档来更新它。RedisJSON 提供精细操作来处理 JSON 数据从而提高应用程序性能减少延迟并降低成本减少网络带宽。 RediSearch RediSearch模块通过强大的全文搜索功能增强了Redis。它引入了基于倒排索引的搜索引擎允许高效且可扩展的文本搜索。使用 RediSearch您可以索引文本数据、执行复杂的搜索查询并检索相关搜索结果。 它提供关键字搜索、精确短语匹配、布尔运算、分页、排序和过滤等功能。 RediSearch 根据搜索结果与查询的匹配程度对搜索结果进行评分使您能够对搜索结果进行排名和确定优先级。 以下是一些最常用的 RediSearch 命令 FT.CREATE使用指定的架构和配置选项创建新的搜索索引。FT.SEARCH对指定索引执行搜索查询根据给定的搜索条件返回匹配的文档。FT.AGGREGATE对指定索引进行聚合查询根据给定的聚合条件返回聚合结果。FT.INFO检索有关搜索索引的信息包括统计信息、配置设置和架构详细信息。FT.DROPINDEX删除搜索索引删除所有文档和关联数据。 下面的示例演示了如何在 Go 应用程序中使用各种 RediSearch 命令。请注意redisearch-go客户端的用法 。 package main import ( fmt math/rand strconv github.com/RediSearch/redisearch-go/redisearch github.com/gomodule/redigo/redis ) var pool *redis.Pool var client *redisearch.Client var cities []string{new york, london, paris} func init() { pool redis.Pool{Dial: func() (redis.Conn, error) { return redis.Dial(tcp, localhost:6379) }} client redisearch.NewClientFromPool(pool, user-index) } func main() { schema : redisearch.NewSchema(redisearch.DefaultOptions). AddField(redisearch.NewTextFieldOptions(name, redisearch.TextFieldOptions{})). AddField(redisearch.NewTextFieldOptions(city, redisearch.TextFieldOptions{})) indexDefinition : redisearch.NewIndexDefinition().AddPrefix(user:) client.CreateIndexWithIndexDefinition(schema, indexDefinition) fmt.Println(redisearch index created) conn : pool.Get() for i : 1; i 10; i { hashName : user: strconv.Itoa(i) val : redis.Args{hashName}.AddFlat(map[string]string{user_id: strconv.Itoa(i), city: cities[rand.Intn(len(cities))]}) conn.Do(HSET, val...) fmt.Println(created hash -, hashName) } docs, total, _ : client.Search(redisearch.NewQuery(*)) fmt.Println(no. of indexed documents , total) docs, total, _ client.Search(redisearch.NewQuery(city:(paris|london))) fmt.Println(found, total, users in london or paris) for _, doc : range docs { fmt.Println(document ID -, doc.Id) fmt.Println(document attributes -, doc.Properties) } err : client.DeleteDocument(user:1) if err ! nil { fmt.Println(failed to delete document (hash) user:1, err) } fmt.Println(deleted document (hash) user:1) _, total, _ client.Search(redisearch.NewQuery(*)) fmt.Println(no. of indexed documents , total) err client.DropIndex(true) if err ! nil { fmt.Println(failed to drop index, err) } fmt.Println(dropped index and documents) _, total, _ client.Search(redisearch.NewQuery(*)) fmt.Println(no. of indexed documents , total) } 要运行上述代码请将其复制到名为的文件中 main.go 并执行以下命令 go get github.com/RediSearch/redisearch-go/redisearch go get github.com/gomodule/redigo/redis go run main.go 我们使用 Hash 作为文档但 RediSearch 也可以使用 RedisJSON。当添加或删除文档时索引会自动更新。本示例演示了一些简单的操作包括获取所有文档以及通过城市属性上的 ORclause 进行过滤以获取居住在 伦敦 或 巴黎 的用户。 Redis时间序列 在 Redis 中处理大量时间序列数据时有一些常用的技术。这些涉及将数据存储在 Redis 排序集中其中分数表示时间戳成员表示数据值。另一种方法是使用带有时间戳的字符串键作为键名称的一部分。每个键值对代表时间序列中的一个特定数据点。 然而这些技术在处理大量时间序列数据时存在一些局限性。传统的 Redis 数据结构如字符串键或排序集的查询能力有限并且难以执行复杂的聚合。此外在处理大型数据集时将每个数据点存储为单独的键值对可能会消耗大量内存这通常是时间序列的情况。 RedisTimeSeries模块是原生的时序数据结构为时序数据提供高效的存储和查询能力。它添加了查询功能例如检索某个时间范围内的数据、执行聚合例如求和、计数、平均值、下采样和插值。它还允许我们定义自动过期或缩减数据采样的保留策略从而实现高效的数据保留并降低存储要求。RedisTimeSeries 还与生态系统中的其他工具集成例如 Prometheus 和 Grafana。 RedisTimeSeries 提供了丰富的命令集。以下是一些最常用的 TS.CREATE使用指定的键、标签和保留策略创建新的时间序列。TS.ADD将新数据点添加到时间序列并将其与时间戳和值相关联。TS.RANGE从指定时间范围内的时间序列中检索一系列数据点。TS.MRANGE检索指定时间范围内多个时间序列的数据点。TS.GET从时间序列中检索最新的数据点。TS.MGET从多个时间序列中检索最新的数据点。TS.INCRBY在特定时间戳处增加时间序列中数据点的值。TS.DECRBY在特定时间戳处减少时间序列中数据点的值。TS.INFO检索有关时间序列的元数据信息例如样本数量、内存使用情况和保留策略。TS.QUERYINDEX对时间序列执行基于索引的查询根据指定的过滤器和聚合检索数据点。 下面的示例演示了如何在 Go 应用程序中使用各种 RedisTimeSeries 命令。请注意我们使用的是 redistimeseries-go 客户端。 package main import ( fmt log math/rand time redistimeseries github.com/RedisTimeSeries/redistimeseries-go ) const tsName temperature:living_room func main() { client : redistimeseries.NewClient(localhost:6379, , nil) // TS.CREATE err : client.CreateKeyWithOptions(tsName, redistimeseries.DefaultCreateOptions) if err ! nil { log.Fatal(err) } fmt.Println(created time series key, tsName) tempOptions : []float64{24, 24.5, 25} var storedTS []int64 for i : 1; i 10; i { // TS.ADD res, err : client.AddAutoTs(tsName, tempOptions[(rand.Intn(len(tempOptions)))]) storedTS append(storedTS, res) if err ! nil { log.Fatal(err) } time.Sleep(1 * time.Millisecond) } fmt.Println(added time series data) // TS.GET lastDataPoint, err : client.Get(tsName) if err ! nil { log.Fatal(err) } fmt.Printf(lastest data point - timestamp: %v, temp: %v\n, lastDataPoint.Timestamp, lastDataPoint.Value) // TS.RANGE dataPoints, err : client.RangeWithOptions(tsName, storedTS[0], storedTS[len(storedTS)-1], redistimeseries.DefaultRangeOptions) if err ! nil { log.Fatal(err) } fmt.Println(TS.RANGE result) for _, dp : range dataPoints { fmt.Printf(timestamp: %v, temp: %v\n, dp.Timestamp, dp.Value) } } 要运行上述代码请将其复制到名为的文件中 main.go 并执行以下命令 go get github.com/RedisTimeSeries/redistimeseries-go go run main.go Redis 模块最佳实践 本节介绍了一些在这些模块的实际部署中优化可扩展性和性能的最佳实践。 RedisJSON 优化 JSON 结构以实现高效访问设计 JSON 结构时请考虑应用程序的访问模式。尽可能展平 JSON 层次结构以避免深层嵌套。这使您可以有效地访问特定字段而无需获取整个 JSON 文档。使用 RedisJSON 的路径表达式来检索或修改特定的 JSON 元素而无需解析整个文档。考虑内存管理和数据大小RedisJSON 将 JSON 文档存储为 Redis 字符串。请记住Redis 的最大字符串大小限制为 512 MB。如果您的 JSON 文档很大请考虑将它们分成更小的部分或使用压缩。您可以使用 RedisJSON 作为 RedisSearch 的索引此集成使您能够高效地执行复杂的搜索操作并根据搜索条件检索 JSON 文档。 Redis搜索 仔细选择和优化搜索架构设计搜索架构时请考虑应用程序的特定搜索要求。定义需要可搜索的字段并选择适当的字段类型例如  text、  numeric、  tag。仔细分析数据并选择最相关的字段以包含在搜索索引中。避免包含不必要的字段以最小化索引大小并优化搜索性能。利用查询优化技术 RedisSearch 提供各种查询优化技术来提高搜索性能。利用查询过滤器来减少搜索空间并根据特定条件缩小结果范围。此外请考虑使用词干、同义词和其他特定于语言的分析器来提高搜索准确性。 Redis时间序列 选择最佳时间段根据数据的频率和粒度选择适当的时间间隔。考虑存储空间和查询性能之间的权衡。较小的存​​储桶提供更详细的数据但会导致更大的内存使用量。利用查询优化技术RedisSearch 提供各种查询优化技术来提高搜索性能。使用查询过滤器来减少搜索空间并缩小结果范围。使用压缩和下采样如果您有高频数据且内存资源有限请考虑启用压缩和下采样配置。这有助于减少内存使用而不影响数据准确性。 https://www.jdon.com/69677.html
http://www.hkea.cn/news/14361232/

相关文章:

  • 怎么样做网站推广石家庄网站设计制作
  • python网站开发快吗抚远网站建设
  • 中国域名网站排名vv游戏推广平台
  • 深圳做网站的大公司做目录网站注意事项
  • 珠海做网站推广公司wordpress用户登入界面
  • 如何快速推广自己的网站网页管理系统怎么制作
  • 营销型网站的运营配套不包括wordpress关键词在哪里
  • 哪里的赣州网站建设乒乓球网站建设目标
  • 网站做业务赚钱吗对比插件 wordpress
  • 建设大厦网站2二级域名免费
  • 做网站有哪些技术注册公司代理有哪些
  • 百度站长平台推出网站移动化大赛长沙哪个公司做网站好
  • 廊坊做网站企业教程钓鱼网站如何做
  • 网站改版 重定向在家做兼职的网站
  • 教师网站建设企业实践总结邯郸网站制作多少钱
  • 网站设计在线crm系统做网站办公室图片
  • 北京高端企业网站建设wordpress整合discuz用户
  • 大连微信网站建设电子商务网站建设与管理的有关论文
  • 青岛网站建设策划网站建设分金手指专业十三
  • 长葛网站建设十大网游人气排行榜
  • 网站制作南宁wordpress 导入用户
  • 衡水网站建设格公司wordpress文章打赏
  • 有阿里空间怎么做网站免费创建自己的网站平台
  • 汕头网站制作哪家强有哪些外贸公司网站做的比较好
  • 建设一个网站需要多少费用wordpress网易云插件怎么用
  • 做花瓶的网站综合性门户网站是什么意思
  • 用淘宝评论做网站wordpress 标签函数
  • .net手机网站源码下载使用flask做前后端分离的网站
  • 网站域名在哪买wordpress仿国际
  • 河南网站搭建百度 模块网站