# Litedis
`Litedis` 是一个类似 Redis 的轻量级的本地的 NoSQL 数据库,支持基本的数据结构和操作。和 Redis 最大的不同是,Litedis 开箱即用,无需另开服务器进程。
## 特性
- 实现了基础数据结构及相关操作:
- STING
- LIST
- HASH
- SET
- ZSET
- 支持设置过期时间
- 支持 AOF 持久化
## 安装和支持版本
- 使用 pip 安装
```sh
pip install litedis
```
- 支持的 Python 版本
支持 Python3.8+
## 使用示例
### 持久化和数据库设置
- Litedis 是默认开启持久化的,可以通过参数进行相关设置。
- Litedis 可以将数据存储到不同的数据库下,可以通过 dbname 参数设置
```python
from litedis import Litedis
# 关闭持久化
litedis = Litedis(persistence_on=False)
# 设置持久化路径
litedis = Litedis(data_path="path")
# 设置数据库名称
litedis = Litedis(dbname="litedis")
```
### STRING 的使用
```python
import time
from litedis import Litedis
litedis = Litedis()
# set and get
litedis.set("db", "litedis")
assert litedis.get("db") == "litedis"
# delete
litedis.delete("db")
assert litedis.get("db") is None
# expiration
litedis.set("db", "litedis", px=100) # 100毫秒后过期
assert litedis.get("db") == "litedis"
time.sleep(0.11)
assert litedis.get("db") is None
```
### LIST 的使用
```python
from litedis import Litedis
litedis = Litedis()
# lpush
litedis.lpush("list", "a", "b", "c")
assert litedis.lrange("list", 0, -1) == ["c", "b", "a"]
litedis.delete("list")
# rpush
litedis.rpush("list", "a", "b", "c")
assert litedis.lrange("list", 0, -1) == ["a", "b", "c"]
litedis.delete("list")
# lpop
litedis.lpush("list", "a", "b")
assert litedis.lpop("list") == "b"
assert litedis.lpop("list") == "a"
assert litedis.lrange("list", 0, -1) == []
assert not litedis.exists("list") # 当所有元素被弹出后,相应的 List键 会自动删除
```
### Hash 的使用
```python
from litedis import Litedis
litedis = Litedis()
litedis.delete("hash")
# hset
litedis.hset("hash", {"key1":"value1", "key2":"value2"})
assert litedis.hget("hash", "key1") == "value1"
# hkeys and hvals
assert litedis.hkeys("hash") == ["key1", "key2"]
assert litedis.hvals("hash") == ["value1", "value2"]
```
### SET 的使用
```python
from litedis import Litedis
litedis = Litedis()
litedis.delete("set", "set1", "set2")
# sadd
litedis.sadd("set", "a")
litedis.sadd("set", "b", "c")
members = litedis.smembers("set")
assert set(members) == {"a", "b", "c"}
litedis.sadd("set1", "a", "b", "c")
litedis.sadd("set2", "b", "c", "d")
# inter
result = litedis.sinter("set1", "set2")
assert set(result) == {"b", "c"}
# union
result = litedis.sunion("set1", "set2")
assert set(result) == {"a", "b", "c", "d"}
# diff
result = litedis.sdiff("set1", "set2")
assert set(result) == {"a"}
```
### ZSET 的使用
```python
from litedis import Litedis
litedis = Litedis()
litedis.delete("zset")
# zadd
litedis.zadd("zset", {"a": 1, "b": 2, "c": 3})
assert litedis.zscore("zset", "a") == 1
# zrange
assert litedis.zrange("zset", 0, -1) == ["a", "b", "c"]
# zcard
assert litedis.zcard("zset") == 3
# zscore
assert litedis.zscore("zset", "a") == 1
```
Raw data
{
"_id": null,
"home_page": "https://github.com/linsuiyuan/litedis",
"name": "litedis",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Linsuiyuan",
"author_email": "linsuiyuan@icloud.com",
"download_url": "https://files.pythonhosted.org/packages/e1/fb/04427ad023095d8f9b55751fa3e4531f9f8b60e5c1124357d925a759a302/litedis-3.0.5.tar.gz",
"platform": null,
"description": "# Litedis\n\n\n\n`Litedis` \u662f\u4e00\u4e2a\u7c7b\u4f3c Redis \u7684\u8f7b\u91cf\u7ea7\u7684\u672c\u5730\u7684 NoSQL \u6570\u636e\u5e93\uff0c\u652f\u6301\u57fa\u672c\u7684\u6570\u636e\u7ed3\u6784\u548c\u64cd\u4f5c\u3002\u548c Redis \u6700\u5927\u7684\u4e0d\u540c\u662f\uff0cLitedis \u5f00\u7bb1\u5373\u7528\uff0c\u65e0\u9700\u53e6\u5f00\u670d\u52a1\u5668\u8fdb\u7a0b\u3002\n\n\n\n## \u7279\u6027\n\n- \u5b9e\u73b0\u4e86\u57fa\u7840\u6570\u636e\u7ed3\u6784\u53ca\u76f8\u5173\u64cd\u4f5c\uff1a\n - STING\n - LIST\n - HASH\n - SET\n - ZSET\n- \u652f\u6301\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\n- \u652f\u6301 AOF \u6301\u4e45\u5316\n\n\n\n## \u5b89\u88c5\u548c\u652f\u6301\u7248\u672c\n\n- \u4f7f\u7528 pip \u5b89\u88c5\n\n```sh\npip install litedis\n```\n\n- \u652f\u6301\u7684 Python \u7248\u672c\n\n \u652f\u6301 Python3.8+\n \n \n\n## \u4f7f\u7528\u793a\u4f8b\n\n\n### \u6301\u4e45\u5316\u548c\u6570\u636e\u5e93\u8bbe\u7f6e\n\n- Litedis \u662f\u9ed8\u8ba4\u5f00\u542f\u6301\u4e45\u5316\u7684\uff0c\u53ef\u4ee5\u901a\u8fc7\u53c2\u6570\u8fdb\u884c\u76f8\u5173\u8bbe\u7f6e\u3002\n- Litedis \u53ef\u4ee5\u5c06\u6570\u636e\u5b58\u50a8\u5230\u4e0d\u540c\u7684\u6570\u636e\u5e93\u4e0b\uff0c\u53ef\u4ee5\u901a\u8fc7 dbname \u53c2\u6570\u8bbe\u7f6e\n\n```python\nfrom litedis import Litedis\n\n# \u5173\u95ed\u6301\u4e45\u5316\nlitedis = Litedis(persistence_on=False)\n\n# \u8bbe\u7f6e\u6301\u4e45\u5316\u8def\u5f84\nlitedis = Litedis(data_path=\"path\")\n\n# \u8bbe\u7f6e\u6570\u636e\u5e93\u540d\u79f0\nlitedis = Litedis(dbname=\"litedis\")\n```\n\n### STRING \u7684\u4f7f\u7528\n\n\n```python\nimport time\n\nfrom litedis import Litedis\n\nlitedis = Litedis()\n\n# set and get\nlitedis.set(\"db\", \"litedis\")\nassert litedis.get(\"db\") == \"litedis\"\n\n# delete\nlitedis.delete(\"db\")\nassert litedis.get(\"db\") is None\n\n# expiration\nlitedis.set(\"db\", \"litedis\", px=100) # 100\u6beb\u79d2\u540e\u8fc7\u671f\nassert litedis.get(\"db\") == \"litedis\"\ntime.sleep(0.11)\nassert litedis.get(\"db\") is None\n```\n\n### LIST \u7684\u4f7f\u7528\n\n\n```python\nfrom litedis import Litedis\n\nlitedis = Litedis()\n\n# lpush\nlitedis.lpush(\"list\", \"a\", \"b\", \"c\")\nassert litedis.lrange(\"list\", 0, -1) == [\"c\", \"b\", \"a\"]\nlitedis.delete(\"list\")\n\n# rpush\nlitedis.rpush(\"list\", \"a\", \"b\", \"c\")\nassert litedis.lrange(\"list\", 0, -1) == [\"a\", \"b\", \"c\"]\nlitedis.delete(\"list\")\n\n# lpop\nlitedis.lpush(\"list\", \"a\", \"b\")\nassert litedis.lpop(\"list\") == \"b\"\nassert litedis.lpop(\"list\") == \"a\"\nassert litedis.lrange(\"list\", 0, -1) == []\nassert not litedis.exists(\"list\") # \u5f53\u6240\u6709\u5143\u7d20\u88ab\u5f39\u51fa\u540e\uff0c\u76f8\u5e94\u7684 List\u952e \u4f1a\u81ea\u52a8\u5220\u9664\n```\n\n### Hash \u7684\u4f7f\u7528\n\n\n```python\nfrom litedis import Litedis\n\nlitedis = Litedis()\nlitedis.delete(\"hash\")\n\n# hset\nlitedis.hset(\"hash\", {\"key1\":\"value1\", \"key2\":\"value2\"})\nassert litedis.hget(\"hash\", \"key1\") == \"value1\"\n\n# hkeys and hvals\nassert litedis.hkeys(\"hash\") == [\"key1\", \"key2\"]\nassert litedis.hvals(\"hash\") == [\"value1\", \"value2\"]\n```\n\n### SET \u7684\u4f7f\u7528\n\n\n```python\nfrom litedis import Litedis\n\nlitedis = Litedis()\nlitedis.delete(\"set\", \"set1\", \"set2\")\n\n# sadd\nlitedis.sadd(\"set\", \"a\")\nlitedis.sadd(\"set\", \"b\", \"c\")\nmembers = litedis.smembers(\"set\")\nassert set(members) == {\"a\", \"b\", \"c\"}\n\nlitedis.sadd(\"set1\", \"a\", \"b\", \"c\")\nlitedis.sadd(\"set2\", \"b\", \"c\", \"d\")\n\n# inter\nresult = litedis.sinter(\"set1\", \"set2\")\nassert set(result) == {\"b\", \"c\"}\n\n# union\nresult = litedis.sunion(\"set1\", \"set2\")\nassert set(result) == {\"a\", \"b\", \"c\", \"d\"}\n\n# diff\nresult = litedis.sdiff(\"set1\", \"set2\")\nassert set(result) == {\"a\"}\n```\n\n### ZSET \u7684\u4f7f\u7528\n\n\n```python\nfrom litedis import Litedis\n\nlitedis = Litedis()\nlitedis.delete(\"zset\")\n\n# zadd\nlitedis.zadd(\"zset\", {\"a\": 1, \"b\": 2, \"c\": 3})\nassert litedis.zscore(\"zset\", \"a\") == 1\n\n# zrange\nassert litedis.zrange(\"zset\", 0, -1) == [\"a\", \"b\", \"c\"]\n\n# zcard\nassert litedis.zcard(\"zset\") == 3\n\n# zscore\nassert litedis.zscore(\"zset\", \"a\") == 1\n```\n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Litedis \u662f\u4e00\u4e2a\u7c7b\u4f3c Redis \u7684\u8f7b\u91cf\u7ea7\u7684\u3001\u672c\u5730\u7684\u3001\u5f00\u7bb1\u5373\u7528\u7684 NoSQL \u6570\u636e\u5e93",
"version": "3.0.5",
"project_urls": {
"Homepage": "https://github.com/linsuiyuan/litedis"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "09735c06008487f1ee933effd79f22142a6caab8cbe35bf6fbf53b927728254f",
"md5": "7c1cc1b50c6a78731f1ed585e8ad43b2",
"sha256": "70689f57464c086aaa429ec7aae911df256572728313575129ecab39f73ddddc"
},
"downloads": -1,
"filename": "litedis-3.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7c1cc1b50c6a78731f1ed585e8ad43b2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 30301,
"upload_time": "2025-01-21T14:02:28",
"upload_time_iso_8601": "2025-01-21T14:02:28.639389Z",
"url": "https://files.pythonhosted.org/packages/09/73/5c06008487f1ee933effd79f22142a6caab8cbe35bf6fbf53b927728254f/litedis-3.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e1fb04427ad023095d8f9b55751fa3e4531f9f8b60e5c1124357d925a759a302",
"md5": "c34fe34af409bb038c2db79b14a81992",
"sha256": "4e0b827ab13c87869dc8c2b83b2dd8fb9becdceed78cebf12a240f80a4e08bb8"
},
"downloads": -1,
"filename": "litedis-3.0.5.tar.gz",
"has_sig": false,
"md5_digest": "c34fe34af409bb038c2db79b14a81992",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 24343,
"upload_time": "2025-01-21T14:02:30",
"upload_time_iso_8601": "2025-01-21T14:02:30.012842Z",
"url": "https://files.pythonhosted.org/packages/e1/fb/04427ad023095d8f9b55751fa3e4531f9f8b60e5c1124357d925a759a302/litedis-3.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-21 14:02:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "linsuiyuan",
"github_project": "litedis",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "pytest",
"specs": [
[
"~=",
"8.3.3"
]
]
},
{
"name": "invoke",
"specs": [
[
"~=",
"2.2.0"
]
]
},
{
"name": "sortedcontainers",
"specs": [
[
"~=",
"2.4.0"
]
]
},
{
"name": "twine",
"specs": [
[
"~=",
"6.0.1"
]
]
}
],
"lcname": "litedis"
}