python redis 小白入门教程

目录

一、redis简介

二、redis参数配置

三、Redis 字符串(String)


一、redis简介

Redis 是一种开源(BSD 许可)、内存中数据结构存储,用作数据库、缓存和消息代理。Redis 提供数据结构,例如字符串、散列、列表、集合、带有范围查询的排序集合、位图、超级日志、地理空间索引和流。Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。

阅读本教程前,你需要了解基本的数据结构,例如以下几种:

  • String: 字符串
  • Hash: 散列
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合

普通安装:

pip install redis

国内源安装:

pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple

二、redis参数配置

from redis import StrictRedis

redis_con = StrictRedis(host=host, port=port, db=db, password=password, decode_responses=True)

三、Redis 字符串(String)

Redis SET 命令

Redis SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

SET KEY_NAME VALUE
>>> redis_con.set("key", "value")
True

Redis Get 命令

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 命令

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'

Redis Getset 命令

返回给定 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 命令

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 命令

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 命令

Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

Setbit KEY_NAME OFFSET
>>> redis_con.setbit("bit", 10086, 1) 
0
>>> redis_con.getbit("bit", 10086)    
1

Redis Setex 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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 命令

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'

四、持续更新

Reference

https://www.runoob.com/redis/redis-tutorial.html

你可能感兴趣的:(redis,python,redis,面试,职场和发展,后端)