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()