Skip to content

Commit 55dc9cb

Browse files
committed
Merge branch 'main' into release-rs-gilboa
2 parents c50b3f0 + 4834d38 commit 55dc9cb

File tree

9 files changed

+299
-28
lines changed

9 files changed

+299
-28
lines changed

build/version_archiver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def inject_url_frontmatter(self):
155155
url = f"url: '/{base_url}/{self.new_version}/{relative_path}/'"
156156

157157
else:
158-
f = file.strip(".md")
158+
f = file.removesuffix(".md")
159159
if relative_path == ".":
160160
url = f"url: '/{base_url}/{self.new_version}/{f}/'"
161161
else:

content/develop/clients/jedis/_index.md

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -58,38 +58,31 @@ To include `Jedis` as a dependency in your application, edit the dependency file
5858

5959
## Connect and test
6060

61-
The following code opens a basic connection to a local Redis server
62-
and closes it after use.
61+
Add the following imports to your source file:
6362

64-
```java
65-
package org.example;
66-
import redis.clients.jedis.UnifiedJedis;
63+
{{< clients-example set="landing" step="import" lang_filter="Java-Sync" >}}
64+
{{< /clients-example >}}
6765

68-
public class Main {
69-
public static void main(String[] args) {
70-
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
66+
Connect to localhost on port 6379:
7167

72-
// Code that interacts with Redis...
73-
74-
jedis.close();
75-
}
76-
}
77-
```
68+
{{< clients-example set="landing" step="connect" lang_filter="Java-Sync" >}}
69+
{{< /clients-example >}}
7870

7971
After you have connected, you can check the connection by storing and
80-
retrieving a simple string value:
72+
retrieving a simple [string]({{< relref "/develop/data-types/strings" >}}) value:
73+
74+
{{< clients-example set="landing" step="set_get_string" lang_filter="Java-Sync" >}}
75+
{{< /clients-example >}}
8176

82-
```java
83-
...
77+
Store and retrieve a [hash]({{< relref "/develop/data-types/hashes" >}}):
8478

85-
String res1 = jedis.set("bike:1", "Deimos");
86-
System.out.println(res1); // OK
79+
{{< clients-example set="landing" step="set_get_hash" lang_filter="Java-Sync" >}}
80+
{{< /clients-example >}}
8781

88-
String res2 = jedis.get("bike:1");
89-
System.out.println(res2); // Deimos
82+
Close the connection when you're done:
9083

91-
...
92-
```
84+
{{< clients-example set="landing" step="close" lang_filter="Java-Sync" >}}
85+
{{< /clients-example >}}
9386

9487
## More information
9588

content/develop/clients/redis-py/queryjson.md

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ to learn more about the available connection options.
6464
{{< clients-example py_home_json connect >}}
6565
{{< /clients-example >}}
6666

67+
The example uses an index called `idx:users` for JSON documents and adds
68+
some JSON documents with the `user:` key prefix. To avoid errors, first
69+
delete any existing index or documents whose names that might
70+
conflict with the example:
71+
72+
{{< clients-example py_home_json cleanup_json >}}
73+
{{< /clients-example >}}
74+
6775
Create an index for the JSON data. The code below specifies that only JSON documents with
6876
the key prefix `user:` are indexed. For more information, see
6977
[Query syntax]({{< relref "/develop/ai/search-and-query/query/" >}}).
@@ -111,9 +119,16 @@ need to specify some slightly different options.
111119
When you create the schema for a hash index, you don't need to
112120
add aliases for the fields, since you use the basic names to access
113121
the fields anyway. Also, you must use `HASH` for the `IndexType`
114-
when you create the index. The code below shows these changes with
115-
a new index called `hash-idx:users`, which is otherwise the same as
116-
the `idx:users` index used for JSON documents in the previous examples.
122+
when you create the index.
123+
124+
First delete any existing index or documents
125+
whose names might conflict with the hash example:
126+
127+
{{< clients-example py_home_json cleanup_hash >}}
128+
{{< /clients-example >}}
129+
130+
Create a new index called `hash-idx:users`, which is otherwise the same as
131+
the `idx:users` index used for JSON documents in the previous examples:
117132

118133
{{< clients-example py_home_json make_hash_index >}}
119134
{{< /clients-example >}}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
Title: Redis Cloud changelog (October 2025)
3+
alwaysopen: false
4+
categories:
5+
- docs
6+
- operate
7+
- rc
8+
description: New features, enhancements, and other changes added to Redis Cloud during
9+
October 2025.
10+
highlights: Security fixes
11+
linktitle: October 2025
12+
weight: 65
13+
tags:
14+
- changelog
15+
---
16+
17+
## Security fixes
18+
19+
Redis Cloud has already been updated with a patches for the following vulnerabilities:
20+
21+
- (CVE-2025-49844) A Lua script may lead to remote code execution
22+
- (CVE-2025-46817) A Lua script may lead to integer overflow and potential RCE
23+
- (CVE-2025-46818) A Lua script can be executed in the context of another user
24+
- (CVE-2025-46819) LUA out-of-bound read
25+
26+
No further action is required at this time.
27+
28+
For more information, see the [Redis blog](https://redis.io/blog/security-advisory-cve-2025-49844/) and the [Redis release notes](https://github.com/redis/redis/releases).

content/operate/rc/supported-regions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ Redis Cloud Essentials is available on the following Microsoft Azure regions:
162162
| `west-us` | California, USA |
163163

164164
{{< note >}}
165-
Redis Cloud Pro is available on Azure through Azure Cache for Redis Enterprise. See [Azure Cache for Redis pricing](https://azure.microsoft.com/en-us/pricing/details/cache/) to view the list of Azure regions that support Azure Cache for Redis Enterprise.
165+
Redis Cloud Pro is available on Azure through [Azure Managed Redis](https://azure.microsoft.com/en-us/products/managed-redis/). See [Azure Managed Redis pricing](https://azure.microsoft.com/en-us/pricing/details/managed-redis/) to view the list of Azure regions that support Azure Managed Redis.
166166
{{< /note >}}
167167

168168

local_examples/client-specific/dotnet-async/AsyncLandingExample.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// EXAMPLE: landing
2+
// BINDER_ID netasync-landing
23
// STEP_START import
34
using NRedisStack;
45
using NRedisStack.RedisStackCommands;

local_examples/client-specific/dotnet-sync/SyncLandingExample.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// EXAMPLE: landing
2+
// BINDER_ID netsync-landing
23
// STEP_START import
34
using NRedisStack;
45
using NRedisStack.RedisStackCommands;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// EXAMPLE: landing
2+
// BINDER_ID jedis-landing
3+
// STEP_START import
4+
import redis.clients.jedis.UnifiedJedis;
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
// STEP_END
8+
9+
public class LandingExample {
10+
11+
@Test
12+
public void run() {
13+
// STEP_START connect
14+
UnifiedJedis jedis = new UnifiedJedis("redis://localhost:6379");
15+
// STEP_END
16+
17+
// STEP_START set_get_string
18+
String res1 = jedis.set("bike:1", "Deimos");
19+
System.out.println(res1); // >>> OK
20+
21+
String res2 = jedis.get("bike:1");
22+
System.out.println(res2); // >>> Deimos
23+
// STEP_END
24+
25+
// STEP_START set_get_hash
26+
Map<String, String> hash = new HashMap<>();
27+
hash.put("name", "John");
28+
hash.put("surname", "Smith");
29+
hash.put("company", "Redis");
30+
hash.put("age", "29");
31+
32+
Long res3 = jedis.hset("user-session:123", hash);
33+
System.out.println(res3); // >>> 4
34+
35+
Map<String, String> res4 = jedis.hgetAll("user-session:123");
36+
System.out.println(res4);
37+
// >>> {name=John, surname=Smith, company=Redis, age=29}
38+
// STEP_END
39+
40+
// STEP_START close
41+
jedis.close();
42+
// STEP_END
43+
}
44+
}
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# EXAMPLE: py_home_json
2+
# BINDER_ID python-py_home_json
3+
"""
4+
JSON examples from redis-py "home" page"
5+
https://redis.io/docs/latest/develop/connect/clients/python/redis-py/#example-indexing-and-querying-json-documents
6+
"""
7+
8+
# STEP_START import
9+
import redis
10+
from redis.commands.json.path import Path
11+
import redis.commands.search.aggregation as aggregations
12+
import redis.commands.search.reducers as reducers
13+
from redis.commands.search.field import TextField, NumericField, TagField
14+
from redis.commands.search.index_definition import IndexDefinition, IndexType
15+
from redis.commands.search.query import Query
16+
import redis.exceptions
17+
# STEP_END
18+
19+
# STEP_START create_data
20+
user1 = {
21+
"name": "Paul John",
22+
"email": "[email protected]",
23+
"age": 42,
24+
"city": "London"
25+
}
26+
27+
user2 = {
28+
"name": "Eden Zamir",
29+
"email": "[email protected]",
30+
"age": 29,
31+
"city": "Tel Aviv"
32+
}
33+
34+
user3 = {
35+
"name": "Paul Zamir",
36+
"email": "[email protected]",
37+
"age": 35,
38+
"city": "Tel Aviv"
39+
}
40+
# STEP_END
41+
42+
# STEP_START connect
43+
r = redis.Redis(decode_responses=True)
44+
# STEP_END
45+
46+
# STEP_START cleanup_json
47+
try:
48+
r.ft("idx:users").dropindex(True)
49+
except redis.exceptions.ResponseError:
50+
pass
51+
52+
r.delete("user:1", "user:2", "user:3")
53+
# STEP_END
54+
55+
# STEP_START make_index
56+
schema = (
57+
TextField("$.name", as_name="name"),
58+
TagField("$.city", as_name="city"),
59+
NumericField("$.age", as_name="age")
60+
)
61+
62+
indexCreated = r.ft("idx:users").create_index(
63+
schema,
64+
definition=IndexDefinition(
65+
prefix=["user:"], index_type=IndexType.JSON
66+
)
67+
)
68+
# STEP_END
69+
# REMOVE_START
70+
assert indexCreated
71+
# REMOVE_END
72+
73+
# STEP_START add_data
74+
user1Set = r.json().set("user:1", Path.root_path(), user1)
75+
user2Set = r.json().set("user:2", Path.root_path(), user2)
76+
user3Set = r.json().set("user:3", Path.root_path(), user3)
77+
# STEP_END
78+
# REMOVE_START
79+
assert user1Set
80+
assert user2Set
81+
assert user3Set
82+
# REMOVE_END
83+
84+
# STEP_START query1
85+
findPaulResult = r.ft("idx:users").search(
86+
Query("Paul @age:[30 40]")
87+
)
88+
89+
print(findPaulResult)
90+
# >>> Result{1 total, docs: [Document {'id': 'user:3', ...
91+
# STEP_END
92+
# REMOVE_START
93+
assert str(findPaulResult) == (
94+
"Result{1 total, docs: [Document {'id': 'user:3', 'payload': None, "
95+
+ "'json': '{\"name\":\"Paul Zamir\",\"email\":"
96+
+ "\"[email protected]\",\"age\":35,\"city\":\"Tel Aviv\"}'}]}"
97+
)
98+
# REMOVE_END
99+
100+
# STEP_START query2
101+
citiesResult = r.ft("idx:users").search(
102+
Query("Paul").return_field("$.city", as_field="city")
103+
).docs
104+
105+
print(citiesResult)
106+
# >>> [Document {'id': 'user:1', 'payload': None, ...
107+
# STEP_END
108+
# REMOVE_START
109+
citiesResult.sort(key=lambda doc: doc['id'])
110+
111+
assert str(citiesResult) == (
112+
"[Document {'id': 'user:1', 'payload': None, 'city': 'London'}, "
113+
+ "Document {'id': 'user:3', 'payload': None, 'city': 'Tel Aviv'}]"
114+
)
115+
# REMOVE_END
116+
117+
# STEP_START query3
118+
req = aggregations.AggregateRequest("*").group_by(
119+
'@city', reducers.count().alias('count')
120+
)
121+
122+
aggResult = r.ft("idx:users").aggregate(req).rows
123+
print(aggResult)
124+
# >>> [['city', 'London', 'count', '1'], ['city', 'Tel Aviv', 'count', '2']]
125+
# STEP_END
126+
# REMOVE_START
127+
aggResult.sort(key=lambda row: row[1])
128+
129+
assert str(aggResult) == (
130+
"[['city', 'London', 'count', '1'], ['city', 'Tel Aviv', 'count', '2']]"
131+
)
132+
# REMOVE_END
133+
134+
# STEP_START cleanup_hash
135+
try:
136+
r.ft("hash-idx:users").dropindex(True)
137+
except redis.exceptions.ResponseError:
138+
pass
139+
140+
r.delete("huser:1", "huser:2", "huser:3")
141+
# STEP_END
142+
143+
# STEP_START make_hash_index
144+
hashSchema = (
145+
TextField("name"),
146+
TagField("city"),
147+
NumericField("age")
148+
)
149+
150+
hashIndexCreated = r.ft("hash-idx:users").create_index(
151+
hashSchema,
152+
definition=IndexDefinition(
153+
prefix=["huser:"], index_type=IndexType.HASH
154+
)
155+
)
156+
# STEP_END
157+
# REMOVE_START
158+
assert hashIndexCreated
159+
# REMOVE_END
160+
161+
# STEP_START add_hash_data
162+
huser1Set = r.hset("huser:1", mapping=user1)
163+
huser2Set = r.hset("huser:2", mapping=user2)
164+
huser3Set = r.hset("huser:3", mapping=user3)
165+
# STEP_END
166+
# REMOVE_START
167+
assert huser1Set
168+
assert huser2Set
169+
assert huser3Set
170+
# REMOVE_END
171+
172+
# STEP_START query1_hash
173+
findPaulHashResult = r.ft("hash-idx:users").search(
174+
Query("Paul @age:[30 40]")
175+
)
176+
177+
print(findPaulHashResult)
178+
# >>> Result{1 total, docs: [Document {'id': 'huser:3',
179+
# >>> 'payload': None, 'name': 'Paul Zamir', ...
180+
# STEP_END
181+
# REMOVE_START
182+
assert str(findPaulHashResult) == (
183+
"Result{1 total, docs: [Document " +
184+
"{'id': 'huser:3', 'payload': None, 'name': 'Paul Zamir', " +
185+
"'email': '[email protected]', 'age': '35', 'city': 'Tel Aviv'}]}"
186+
)
187+
# REMOVE_END
188+
189+
r.close()

0 commit comments

Comments
 (0)