2022-11-29 23:03:17 星期二
Redis 简介
redis 是一个 Key-Value 数据库,Value 支持 string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型。是一个 CPU 上缓存数据库,用于高效率的访问和更新数据,现常用于视频点赞等,短时访问量可能非常高,数据更新速度非常快的暂存数据库。
Redis 使用
启动服务
redis-server redis.windows.conf
默认服务启用的端口号是 6379.
启动客户端
redis-cli.exe -h 127.0.0.1 -p 6379
redis 命令
配置
参考文档: Redis 配置 | 菜鸟教程
获得所有配置: CONFIG GET *
设置配置: CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
设置键值对: SET runoobkey redis
删除键值对: DEL runoobkey
检查键是否存在: EXISTS runoobkey
检查值的类型: TYPE runoobkey
python 使用 redis
参考文档: Python redis 使用介绍 | 菜鸟教程
点击查看代码
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
r.get('foo')
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
r.get('foo')
存储 string
set(name, value, ex=None, px=None, nx=False, xx=False)
在 Redis 中设置值,默认,不存在则创建,存在则修改。
参数:
- ex - 过期时间(秒)
- px - 过期时间(毫秒)
- nx - 如果设置为True,则只有name不存在时,当前set操作才执行
- xx - 如果设置为True,则只有name存在时,当前set操作才执行
储存 hash
hset(name, key, value)
name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
参数:
- name - redis的name
- key - name对应的hash中的key
- value - name对应的hash中的value
存储 list
lpush(name, *values)
在 name 对应的list中添加元素,每个新的元素都添加到列表的最左边.
建议使用 r.rpushx(name, *values) ,符合 python append 操作习惯。
lpush 添加数据需要注意后续通过 lindex(name, index) 取值索引顺序颠倒
储存 set
sadd(name, *values)
在 name - 对应的集合中添加元素
有一些集合所需的交并集操作方法。
其他常用操作
delete(*names)
删除数据。
exists(name)
检查 name 是否存在。
keys(parttern='')
模糊匹配,默认返回所有的 key。
expire(name ,time)
设置超时。
dbsize()
返回当前 redis 内包含的数据条目数量
save()
执行 “检查点” 操作,将数据写回磁盘。(保存时阻塞)
flushdb()
清空 redis 中的所有数据。
管道(pipeline)
redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。
管道(pipeline)是 redis 在提供单个请求中缓冲多条服务器命令的基类的子类。它通过减少服务器-客户端之间反复的TCP数据库包,从而大大提高了执行批量命令的功能。
点击查看代码
import redis
import time
pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)
# pipe = r.pipeline(transaction=False) # 默认的情况下,管道里执行的命令可以保证执行的原子性,执行pipe = r.pipeline(transaction=False)可以禁用这一特性。
# pipe = r.pipeline(transaction=True)
pipe = r.pipeline() # 创建一个管道
pipe.set('name', 'jack')
pipe.set('role', 'sb')
pipe.sadd('faz', 'baz')
pipe.incr('num') # 如果num不存在则vaule为1,如果存在,则value自增1
pipe.execute()