您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

redis数据库及操作 相关配置, redis数据类型, python使用redis(django使用redis)

bubuko 2022/1/25 20:08:25 python 字数 16414 阅读 2772 来源 http://www.bubuko.com/infolist-5-1.html

redis介绍 """ 1、官网下载:安装包或是绿色面安装 2、安装并配置环境变量 """ redis VS mysql """ redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定) mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合) 大量访问的临时数据 ...

redis介绍

"""
1、官网下载:安装包或是绿色面安装
2、安装并配置环境变量
"""
redis VS mysql
"""
redis: 内存数据库(读写快)、非关系型(操作数据方便、数据固定)
mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系、可以不同组合)

大量访问的临时数据,才有redis数据库更优
"""
redis VS memcache
"""
redis: 操作字符串、列表、字典、无序集合、有序集合 | 支持数据持久化(数据丢失可以找回(默认持久化,主动持久化save)、可以将数据同步给mysql) | 高并发支持
memcache: 操作字符串 | 不支持数据持久化 | 并发量小
"""

 

Redis操作

启动服务
"""
前提:前往一个方便管理redis持久化文件的逻辑再启动服务:dump.rdb
1)前台启动服务
>: redis-server

2)后台启动服务
>: redis-server --service-start
注)Linux系统后台启动(或是修改配置文件,建议采用方式)
>: redis-server &

3)配置文件启动前台服务
>: redis-server 配置文件的绝对路径

4)配置文件启动后台服务
注)windows系统默认按Redis安装包下的redis.windows-service.conf配置文件启动
>: redis-server --service-start
注)Linux系统可以完全自定义配置文件(redis.conf)后台启动
>: redis-server 配置文件的绝对路径 &
"""


"""
windows系统
1)前台启动
    i)打开终端切换到redis安装目录
    >: cd C:\Apps\Redis
    
    ii)启动服务
    >: redis-server redis.windows.conf

2)后台启动
    i)打开终端切换到redis安装目录
    >: cd C:\Apps\Redis
    
    ii)启动服务(后面的配置文件可以省略)
    >: redis-server --service-start redis.windows-service.conf
"""

 

密码管理
"""
1)提倡在配置文件中配置,采用配置文件启动
requirepass 密码

2)当服务启动后,并且连入数据库(redis数据库不能轻易重启),可以再改当前服务的密码(服务重启,密码重置)
config set requirepass 新密码

3)已连入数据库,可以查看当前数据库服务密码
config get requirepass
"""

 

连接数据库
"""
1)默认连接:-h默认127.0.0.1,-p默认6379,-n默认0,-a默认无
>: redis-cli

2)完整连接:
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码

3)先连接,后输入密码
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号
>: auth 密码
"""

 

切换数据库
"""
1)在连入数据库后执行
>: select 数据库编号
"""

 

关闭服务
"""
1)先连接数据库,再关闭redis服务
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码
>: shutdown

2)直接连接数据库并关闭redis服务
>: redis-cli -h ip地址 -p 端口号 -n 数据库编号 -a 密码 shutdown
"""

 

清空redis数据库
"""
1)连接数据库执行
>: flushall
"""

 

数据持久化
"""
1)配置文件默认配置
save 900 1  # 超过900秒有1个键值对操作,会自动调用save完成数据持久化
save 300 10  # 超过300秒有10个键值对操作,会自动调用save完成数据持久化
save 60 10000  # 超过60秒有10000个键值对操作,会自动调用save完成数据持久化

2)安全机制
# 当redis服务不可控宕机,会默认调用一下save完成数据持久化(如果数据量过大,也可能存在部分数据丢失)

3)主动持久化
>: save  # 连入数据库时,主动调用save完成数据持久化

注:数据持久化默认保存文件 dump.rdb,保存路径默认为启动redis服务的当前路径
"""

 

redis相关配置
"""
1)绑定的ip地址,多个ip用空格隔开
bind 127.0.0.1

2)端口,默认6379,一般不做修改
port 6379

3)是否以守护进程启动,默认为no,一般改为yes代表后台启动(windows系统不支持)
daemonize no

4)定义日志级别,默认值为notice,有如下4种取值:
    debug(记录大量日志信息,适用于开发、测试阶段)
    verbose(较多日志信息)
    notice(适量日志信息,使用于生产环境)
    warning(仅有部分重要、关键信息才会被记录)
loglevel notice

5)配置日志文件保持地址,默认打印在命令行终端的窗口上
    如果填写 "./redis.log" 就会在启动redis服务的终端所在目录下,用redis.log记录redis日志
logfile ""

eg)终端首先切断到log文件夹所在目录(一般就可以采用redis的安装目录,也可以自定义),再启动reids服务
logfile "./log/redis.log"

6)数据库个数,默认是16个,没特殊情况,不建议修改
databases 16

7)数据持久化
save 900 1  # 超过900秒有1个键值对操作,会自动调用save完成数据持久化
save 300 10  # 超过300秒有10个键值对操作,会自动调用save完成数据持久化
save 60 10000  # 超过60秒有10000个键值对操作,会自动调用save完成数据持久化

8)数据库持久化到硬盘失败,redis会立即停止接收用户数据,让用户知道redis持久化异常,避免数据灾难发生(重启redis即可),默认为yes,不能做修改
stop-writes-on-bgsave-error yes

9)消耗cpu来压缩数据进行持久化,数据量小,但会消耗cpu性能,根据实际情况可以做调整
rdbcompression yes

10)增持cpu 10%性能销毁来完成持久化数据的校验,可以取消掉
rdbchecksum yes

11)持久化存储的文件名称
dbfilename dump.rdb

12)持久化存储文件的路径,默认是启动服务的终端所在目录
dir ./

13)reids数据库密码
requirepass 密码
"""

 

Redis数据类型

"""参考菜鸟教程
数据操作:字符串、列表、哈希(字典)、无序集合、有序(排序)集合
    有序集合:游戏排行榜
    
字符串:
    set key value
    get key
    mset k1 v1 k2 v2 ...
    mget k1 k2 ...
    setex key exp value          # 等同于:set key value ex value 例:set b 2 ex 100
    incrby key increment      # incr a   a+1    decr a    a-1
    incrbyfloat a 2.3        # 变为浮点型增加     经测试:可能变为无尽小数
补充:
    set name abedefxyz
    getrange name 0 -1    # 全部去除,注意首位都包括
    setnx a 999     # 如果a不存在,赋值999, 如果a存在,保持原值
    strlen a        # 获取a的字符串长度
    append a 8        # 在a的字符串末尾加上8字符
    
列表:
    rpush key value1 value2 ...   # 从右添加值
    lpush key value1 value2 ...      # 从左添加值
    lrange key bindex eindex    # 取出列表bindex到eindex的数据
    lindex key index        # 列表第index个,索引从0开始
    lpop key | rpop key            # 从左/右上删除第一个元素
    linsert key before|after old_value new_value # 在列表老值前面或后面插入新值
补充:
    llen n2     # 获取n2的长度

哈希:
    hset key field value    # 数据名  字段  值  增或者改
    hget key field
    hmset key field1 value1 field2 value2 ...
    hmget key field1 field2
    hkeys key            # 拿出所有key
    hvals key            # 拿出所有值
    hdel key field        # 删除对应字段key
    
集合:
    sadd key member1 member2 ...    # 创建或增加
    sdiff key1 key2 ...        # 差集,key1有,key2没有
    sdiffstore newkey key1 key2 ...    # 把key1于key2的差集存入newkey中    
    sinter key1 key2 ...    # 交集
    sunion key1 key2 ...    # 并集
    smembers key    # 参看所有成员
    spop key count    # 删除count个任意成员,并返回被删成员,count不写默认为1
    
有序集合:
    zadd key grade1 member1 grade2 member2 ...
    zincrby key grade member    # 对member成员增加grade
    zrange key start end    # 从低到高
    zrevrange key start end    # 从高到底
"""

 

python使用redis

依赖
>: pip3 install redis
直接使用
import redis
# decode_responses=True得到的结果会自动解码(不是二进制数据) 
r = redis.Redis(host=127.0.0.1, port=6379, db=1, password=None, decode_responses=True)

# r.set(‘a‘,‘100‘)
# print(r.get(‘a‘))
# r.setex(‘test‘,‘20‘,‘100‘)
# print(r.get(‘test‘))
连接池使用
import redis    # port,host,db=0默认可以省略
pool = redis.ConnectionPool(host=127.0.0.1, port=6379, db=1, max_connections=100, password=None, decode_responses=True)
r = redis.Redis(connection_pool=pool)

# r.rpush(‘arr‘,1,2,3,4)
# r.zadd(‘game‘,{‘Bob‘:10,‘Tom‘:5,‘Jerry‘:7,‘Ben‘:8})
# print(r.zrevrange(‘game‘,0,2))
缓存使用:要额外安装 django-redis

相当于django缓存采用redis数据库存储,将满足jason类型数据装换为字符串存入

pip install django-redis

# 1.将缓存存储位置配置到redis中:settings.py
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100},
            "DECODE_RESPONSES": True,
            "PASSWORD": "",
        }
    }
}

# 2.操作cache模块直接操作缓存:views.py
from django.core.cache import cache  # 结合配置文件实现插拔式
# 存放token,可以直接设置过期时间
cache.set(token, header.payload.signature, 300)
# 取出token
token = cache.get(token)

例:

from django.core.cache import cache
from user import models,serializers
from user import models,serializers
user = models.User.objects.first()
serializer_data = serializers.LoginSerializer(user).data
print(serializer_data,type(serializer_data))

# 原生redis不能直接操作drf序列化类序列化后的结果(ReturnDict)
# from .t_redis import redis
# redis.set(‘d1‘,serializer_data)

# django支持的List、Dict以及特殊的列表字典(ReturnDict), 缓存可以直接操作
cache.set(usr_data,serializer_data)
print(cache.get(usr_data))

 

redis数据库及操作 相关配置, redis数据类型, python使用redis(django使用redis)

原文:https://www.cnblogs.com/ludingchao/p/12405158.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶