添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
1




    

pip install redis

1. redis连接

直接连接

1
2
3
import redis

conn = redis.Redis(host='127.0.0.1', port=6379, password='')

主要是三个参数, host + port + password

需要注意一点,当我们需要连接的redis不在本机时,请确保redis的配置是开启了外部访问的,否则会提示连接失败

连接池方式

连接池的方式最大的好处是每次需要获取连接时,从连接池中获得一个可用连接,用完之后不会立马释放,而是扔回到连接池,以实现连接的复用,避免频繁的redis连接的创建和释放

1
2
3
4
import redis

pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='')
conn = redis.Redis(connection_pool=pool)

2. String

首先介绍Redis基本数据结构中String的操作姿势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# name 为redis对应的key
# value 为redis对应的value
# ex 过期时间(s)
# px 过期时间(ms)
# nx true : 表示在key不存在时,set操作成功; false 时表示不管咋地都写入
# xx true : 表示在key存在时,set操作才成功
redis.client.Redis#set(name, value, ex=None, px=None, nx=False, xx=False)


# 带失效时间的设置
# name -> redisKey
# value -> redisValue
# time -> 过期时间,s
redis.client.Redis#setex(name, time, value)

# 带失效时间的设置,与上面的区别在于参数的时间为ms
redis.client.Redis#psetex(name, time_ms, value)

# key不存在时,才写入
redis.client.Redis#setnx(name, value)

# 批量写入,传入字典
redis.client.Redis#mset(dict)

注意下面获取的结果类型为byte,使用的时候需要转换成目标对象

1
2
3
4
5
# 获取数据
redis.client.Redis#get(name)

# 批量获取数据,注意返回列表,与传入的keys根据数组的下标进行对应;如果某个key不存在,返回None
redis.client.Redis#mget(keys)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import time

import redis

conn = redis.Redis(host='127.0.0.1', port=6379, password='')


def str_demo():
# 基本的写入 读取操作
ans = conn.set('test', 1234)
print(ans)

# 请注意返回的结果为byte类型
ans = conn.get('test')
print(ans.decode('utf8'))

# 不存在时,才写入成功,此时应该返回false
ans = conn.setnx('test', 4567)
print(f'{ans}==False')

ans = conn.setex('test', 1, 'abc')
ret = conn.get('test')
time.sleep(1)
ret2 = conn.get('test')
print(f'{ans}|{ret}==abc|{ret2}==blank')

conn.mset({'t1': 1, 't2': 2, 't3': 3, 't4': 4})
ans = conn.mget('t1', 't3', 't5', 't4', 't2')
print(f"mget: {ans}")


str_demo()
1
2
3
4
5
True
1234
False==False
True|b'abc'==abc|None==blank
mget: [b'1', b'3', None, b'4', b'2']

请注意一下上面的mget返回结果,与传入的keys是通过数组小标进行关联的

3. List

数据结构为列表,支持左添加,右添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 在列表左边添加数据,value可以是多个,最右边的参数,在最终列表的最左边
lpush(key, v1, v2...)
# 在列表的右边添加数据,value可以有多个,最右边的参数,在最终列表的最右边
rpush(key, v1, v2...)

# 在列表的最左边,添加一个数据
lpushex(key, value)
# 在列表的最右边,添加一个数据
rpushex(key, value)


# 修改列表中index索引的值,替换为 newValue
lset(key, index, newValue)

# 查找 originValue, 在它的左边/右边(由where参数决定)插入一个 newValue
linsert(key, where, originValue, newValue)
1
2
3
4
5
# 获取某个位置的元素
lindex(key, index)

# 获取索引为 start -> end 的所有值,end为-1时,表示最右边一个
lrange(key, start, end)
1
2
3
4
5
6
# 删除最左边的
lpop(key)
# 删除指定的value,如果num为0,表示删除所有的value;如果大于0,表示从左到右删除num个;小于从右到做删除num个
lrem(key, value, num)
# 移除不再索引内的所有值
ltrim(key, start, end)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

def list_demo():
key = "l_test"
conn.delete(key)
# 批量添加,3在最右边,返回列表长度
conn.lpush(key, 1, 2, 3)
ans = conn.lpushx(key, 'head')
print(ans)

conn.rpush(key, 'a', 'b')
conn.rpushx(key, 'tail')

ans = conn.lrange(key, 0, -1)
print(ans)

# 更新索引为2的值
conn.lset(key, 2, 'update')
conn.linsert(key, 'after', 'update', 'insert')
ans = conn.lrange(key, 0, -1)
print(ans)

# 返回并删除最左边的元素
ans = conn.lpop(key)
print(f"{ans}==head")

# 保留索引在闭区间[1,3]的元素
conn.ltrim(key, 1, 3)
ans = conn.lrange(key, 0, -1)
print(ans)

list_demo()
1
2
3
4
5
4
[b'head', b'3', b'2', b'1', b'a', b'b', b'tail']
[b'head', b'3', b'update', b'insert', b'1', b'a', b'b', b'tail']
b'head'==head
[b'update', b'insert', b'1']

II. 其他

1. 一灰灰Blog https://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840
  • 3. 扫描关注

    一灰灰blog

    221125-Android Studio 报错(Installed Build Tools revision 3x.0.0 is corrupted)解决方法 Java / Android AES Android Arthas AutoCloseable BeanUtil BloomFilter BufferedImage BugFix Bugfix CURL Chrome DNS Docker Dubbo ElasticSearch Email FastJson Git GitHub Grafana Groovy Gson Guava HashMap IDEA IO ImageMagic InfluxDB InputStream Iterator JDK JNDI JVM Jackson Java JavaAgent JavaScript JavaWeb Jquery Json LRU Linux List MD5 Map Maven Mongo MongoDB MongoDb MySql Mybatis Mysql Nginx Node OGNL Prometheus ProtoStuff Python QlExpress QuickAlarm QuickMedia RMI RabbitMQ ReactJS Redis SSL Shell Socket Solr Spring SpringBoot Vue WebSocket WebView Win10 Yaml ZooKeeper css curl dns ffmpeg git gitalk google grep hexo hostname jdk logger markdown named ncat python ssh ssl time tmux zsh 专业词汇 乱码 二维码 代理 内购 分库分表 反射 吐槽 子系统 工具 并发 序列化 手记 技术方案 指南 教程 方案设计 时区 时间窗口 爬虫 编程技巧 证书 问题记录 随笔
    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now