目录
一、redis简介
二、redis参数配置
三、Redis 字符串(String)
Redis 是一种开源(BSD 许可)、内存中数据结构存储,用作数据库、缓存和消息代理。Redis 提供数据结构,例如字符串、散列、列表、集合、带有范围查询的排序集合、位图、超级日志、地理空间索引和流。Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。
阅读本教程前,你需要了解基本的数据结构,例如以下几种:
普通安装:
pip install redis
国内源安装:
pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple
from redis import StrictRedis
redis_con = StrictRedis(host=host, port=port, db=db, password=password, decode_responses=True)
Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。
SET KEY_NAME VALUE
>>> redis_con.set("key", "value")
True
Redis Get 命令用于获取指定 key 的值。如果 key 不存在,返回 None。如果key 储存的值不是字符串类型,返回一个错误。
GET KEY_NAME
>>> redis_con.set("key", "value")
True
>>> redis_con.get("key")
'value'
>>> redis_con.get("key1")
Redis Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
GETRANGE KEY_NAME start end
>>> redis_con.set("mykey", "This is my test key")
True
>>> redis_con.getrange("mykey", 0, 3)
'This'
>>> redis_con.getrange("mykey", 0, -1)
'This is my test key'
返回给定 key 的旧值。 当 key 没有旧值时,即 key 不存在时,返回 None 。
当 key 存在但不是字符串类型时,返回一个错误。
GETSET KEY_NAME VALUE
>>> redis_con.set("key", "value")
True
>>> redis_con.getset("key", "value1")
'value'
>>> redis_con.get("key")
'value1'
Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
GETBIT KEY_NAME OFFSET
>>> redis_con.set("key", "value")
True
>>> redis_con.getbit("key", 25)
1
>>> redis_con.getbit("key", 24)
0
Redis Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
MGET KEY1 KEY2 .. KEYN
>>> redis_con.set("key1", 1)
True
>>> redis_con.set("key2", 2)
True
>>> redis_con.mget("key1", "key2")
['1', '2']
Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
Setbit KEY_NAME OFFSET
>>> redis_con.setbit("bit", 10086, 1)
0
>>> redis_con.getbit("bit", 10086)
1
Redis Setex 命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
SETEX KEY_NAME TIMEOUT VALUE
>>> redis_con.setex("mykey", 60, "redis")
True
>>> redis_con.ttl("mykey")
49
>>> redis_con.get("mykey")
'redis'
Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。
SETNX KEY_NAME VALUE
>>> redis_con.exists("jobs")
0
>>> redis_con.setnx("jobs", "programmer")
True
>>> redis_con.setnx("jobs", "code-farmer")
False
>>> redis_con.get("jobs")
'programmer'
Redis Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。
SETRANGE KEY_NAME OFFSET VALUE
>>> redis_con.set("key1", "Hello world")
True
>>> redis_con.setrange("key1", 6, "redis")
11
>>> redis_con.get("key1")
'Hello redis'
Redis Strlen 命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
STRLEN KEY_NAME
>>> redis_con.set("mykey", "Helloworld")
True
>>> redis_con.strlen("mykey")
10
>>> redis_con.strlen("nonexisting")
0
Redis Mset 命令用于同时设置一个或多个 key-value 对。
MSET key1 value1 key2 value2 .. keyN valueN
>>> key_dict = dict()
>>> key_dict["key1"] = "value1"
>>> key_dict["key2"] = "value2"
>>> redis_con.mset(key_dict)
True
>>> redis_con.get("key1")
'value1'
>>> redis_con.get("key2")
'value2'
Redis Msetnx 命令用于所有给定 key 都不存在时,同时设置一个或多个 key-value 对。
MSETNX key1 value1 key2 value2 .. keyN valueN
# 对不存在的 key 进行 MSETNX
>>> key_dict = dict()
>>> key_dict["rmdbs"] = "MySQL"
>>> key_dict["nosql"] = "MongoDB"
>>> key_dict["key-value-store"] = "redis"
>>> redis_con.msetnx(key_dict)
True
>>> redis_con.mget(["rmdbs", "nosql", "key-value-store"])
['MySQL', 'MongoDB', 'redis']
# MSET 的给定 key 当中有已存在的 key
>>> redis_con.msetnx({"rmdbs":"Sqlite", "language":"python"})# rmdbs 键已经存在,操作失败
False
>>> redis_con.exists("rmdbs") # 因为 MSET 是原子性操作,language 没有被设置
1
>>> redis_con.get("rmdbs") # rmdbs 也没有被修改
'MySQL'
Redis Psetex 命令以毫秒为单位设置 key 的生存时间。
PSETEX key1 EXPIRY_IN_MILLISECONDS value1
>>> redis_con.psetex("mykey", 1000, "Hello")
True
>>> redis_con.pttl("mykey")
-2
>>> redis_con.get("mykey")
Redis Incr 命令将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
INCR KEY_NAME
>>> redis_con.set("pageView", 20)
True
>>> redis_con.incr("pageView")
21
>>> redis_con.get("pageView")
'21'
Redis Incrby 命令将 key 中储存的数字加上指定的增量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
INCRBY KEY_NAME INCR_AMOUNT
# key 存在且是数字值
>>> redis_con.set("rank", 50)
True
>>> redis_con.incrby("rank", 20)
70
>>> redis_con.get("rank")
'70'
# key 不存在时
>>> redis_con.exists("counter")
0
>>> redis_con.incrby("counter", 30)
30
>>> redis_con.get("counter")
'30'
# key 不是数字值时
>>> redis_con.set("book", "long long age...")
True
>>> redis_con.incrby("book", 200)
ERROR
Redis Incrbyfloat 命令为 key 中所储存的值加上指定的浮点数增量值。
如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。
INCRBYFLOAT KEY_NAME INCR_AMOUNT
# 值和增量都不是指数符号
>>> redis_con.set("mykey", 10.50)
True
>>> redis_con.incrbyfloat("mykey", 0.1)
10.6
# 值和增量都是指数符号
>>> redis_con.set("mykey", 314e-2)# 用 SET 设置的值可以是指数符号
True
>>> redis_con.get("mykey")# 但执行 INCRBYFLOAT 之后格式会被改成非指数符号
'3.14'
# 可以对整数类型执行
>>> redis_con.incrbyfloat("mykey", 0)
3.14
>>> redis_con.set("mykey", 3)
True
>>> redis_con.incrbyfloat("mykey", 1.1)
4.1
# 后跟的 0 会被移除
>>> redis_con.set("mykey", 3.0)
True
>>> redis_con.get("mykey") # SET 设置的值小数部分可以是 0
'3.0'
>>> redis_con.incrbyfloat("mykey", 1.00000000000000) # 但 INCRBYFLOAT 会将无用的 0 忽略掉,有需要的话,将浮点变为整数
4.0
>>> redis_con.get("mykey")
'4'
Redis Decr 命令将 key 中储存的数字值减一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
DECR KEY_NAME
# 对存在的数字值 key 进行 DECR
>>> redis_con.set("failure_time", 10)
True
>>> redis_con.decr("failure_time")
9
# 对不存在的 key 值进行 DECR
>>> redis_con.exists("count")
0
>>> redis_con.decr("count")
-1
# 对存在但不是数值的 key 进行 DECR
>>> redis_con.set("company", "xxx")
True
>>> redis_con.decr("company")
ERROR
Redis Decrby 命令将 key 所储存的值减去指定的减量值。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
DECRBY KEY_NAME DECREMENT_AMOUNT
# 对已存在的 key 进行 DECRBY
>>> redis_con.set("count", 100)
True
>>> redis_con.decrby("count", 20)
80
# 对不存在的 key 进行DECRBY
>>> redis_con.exists("pages")
0
>>> redis_con.decrby("pages", 10)
-10
Redis Append 命令用于为指定的 key 追加值。
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
APPEND KEY_NAME NEW_VALUE
# 对不存在的 key 执行 APPEND
>>> redis_con.exists("myphone") # 确保 myphone 不存在
0
>>> redis_con.append("myphone", "nokia") # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
5
# 对已存在的字符串进行 APPEND
>>> redis_con.append("myphone", "-1110") # 长度从 5 个字符增加到 12 个字符
10
>>> redis_con.get("myphone")
'nokia-1110'
https://www.runoob.com/redis/redis-tutorial.html