django做mysql redis缓存_redis的介绍与操作及Django中使用redis缓存

本文对比了redis与mysql的特点,强调redis在处理大量访问临时数据时的优势。介绍了redis与memcache的区别,展示了redis的基础操作,如启动服务、连接数据库等。此外,详细列举了redis字符串、列表、集合、有序集合的操作命令,并提供了Python使用redis的示例,包括连接池的使用。最后,说明了如何在Django中集成和使用redis作为缓存系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis VS mysql的区别

"""

redis: 内存数据库(读写快)、非关系型(操作数据方便)

mysql: 硬盘数据库(数据持久化)、关系型(操作数据间关系)

大量访问的临时数据,才有redis数据库更优

"""

redis VS memcache

Django自带的缓存机制用的是memcache存储

"""

redis:

操作字符串、列表、字典、无序集合、有序集合

支持数据持久化(数据丢失可以找回、可以将数据同步给mysql)

支持高并发

memcache:

操作字符串

不支持数据持久化

并发量小

"""

Redis操作

"""

基础操作:

启动服务:redis-server & (&符号指关闭了对话框,后台还运行)

连接数据库:redis-cli

连接指定数据库:redis-cli -h 127.0.0.1 -p 6379 -n 1

切换数据库:select 1

注:redis共有16个数据库(0-15)

数据操作:字符串、列表、字典、无序集合、有序(排序)集合

有序集合:游戏排行榜

"""

redis数据库

# 1.安装redis与可视化操作工具

# 2.在服务中管理redis服务器的开启关闭

# 3.命令行简单使用redis:

-- redis-cli # 启动客户端

-- set key value # 设置值

-- get key # 取出值

# 4.redis支持:字符串、字典、列表、集合、有序集合

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

# 5.特点:可持久化、单线程单进程并发

Redis 字符串命令

下表列出了常用的 redis 字符串命令:

序号

命令及描述

2

GET key 获取指定 key 的值。

4

GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

5

GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

6

[MGET key1 key2..] 获取所有(一个或多个)给定 key 的值。

7

SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

8

SETEX key seconds value 将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

9

SETNX key value 只有在 key 不存在时设置 key 的值。

10

SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

11

STRLEN key 返回 key 所储存的字符串值的长度。

12

[MSET key value key value ...] 同时设置一个或多个 key-value 对。

13

[MSETNX key value key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

14

PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

15

INCR key 将 key 中储存的数字值增一。

16

INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。

17

INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 。

18

DECR key 将 key 中储存的数字值减一。

19

DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。

20

APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。

Redis 列表命令

下表列出了列表相关的基本命令:

序号

命令及描述

1

[BLPOP key1 key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

2

[BRPOP key1 key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

3

BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

7

LPOP key 移出并获取列表的第一个元素

8

[LPUSH key value1 value2] 将一个或多个值插入到列表头部

9

13

LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

14

RPOP key 移除列表的最后一个元素,返回值为移除的元素。

15

RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回

16

[RPUSH key value1 value2] 在列表中添加一个或多个值

Redis 集合命令

下表列出了 Redis 集合基本命令:

序号

命令及描述

1

[SADD key member1 member2] 向集合添加一个或多个成员

2

3

[SDIFF key1 key2] 返回给定所有集合的差集

4

[SDIFFSTORE destination key1 key2] 返回给定所有集合的差集并存储在 destination 中

5

[SINTER key1 key2] 返回给定所有集合的交集

6

[SINTERSTORE destination key1 key2] 返回给定所有集合的交集并存储在 destination 中

7

SISMEMBER key member 判断 member 元素是否是集合 key 的成员

9

SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合

10

SPOP key 移除并返回集合中的一个随机元素

11

[SRANDMEMBER key count] 返回集合中一个或多个随机数

12

[SREM key member1 member2] 移除集合中一个或多个成员

13

[SUNION key1 key2] 返回所有给定集合的并集

14

[SUNIONSTORE destination key1 key2] 所有给定集合的并集存储在 destination 集合中

Redis 有序集合命令

下表列出了 redis 有序集合的基本命令:

序号

命令及描述

1

[ZADD key score1 member1 score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD key 获取有序集合的成员数

3

ZCOUNT key min max 计算在有序集合中指定区间分数的成员数

4

5

[ZINTERSTORE destination numkeys key key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

7

[ZRANGE key start stop WITHSCORES] 通过索引区间返回有序集合指定区间内的成员

8

[ZRANGEBYLEX key min max LIMIT offset count] 通过字典区间返回有序集合的成员

9

[ZRANGEBYSCORE key min max WITHSCORES] [LIMIT] 通过分数返回有序集合指定区间内的成员

10

11

[ZREM key member member ...] 移除有序集合中的一个或多个成员

15

[ZREVRANGE key start stop WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到低

16

[ZREVRANGEBYSCORE key max min WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

19

[ZUNIONSTORE destination numkeys key key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

[ZSCAN key cursor MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

python使用redis

依赖

>: pip3 install redis

直接使用

import redis

# db=1为数据库db1,redis有16个数据库

r = redis.Redis(host='127.0.0.1', port=6379, db=1)

连接池使用

import redis

# max_connections最大连接数

pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=10, max_connections=100)

r = redis.Redis(connection_pool=pool)

import redis

# 直接使用

# r = redis.Redis(host='127.0.0.1', port=6379, db=0)

# 连接池使用

# max_connections最大连接数

pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=10, max_connections=100)

r = redis.Redis(connection_pool=pool)

# 字符串操作

# r.set('name', 'cxk')

# print(r.get('name'))

# 三秒后该字符串失效

r.setex('name', 3, 'kobe')

print(r.get('name'))

# 列表操作

r.rpush('stus', 's1', 's2', 's3',)

print(r.lrange('stus', 0, 1000))

# 有序集合操作

r.zadd('game', {'a': 10, 'b':20, 'c':15})

print(r.zrevrange('game', 0, 1))

print(r.zrange('game', 0, -1))

缓存使用:要额外安装 django-redis

>: pip install django-redis

# 1.将django的缓存存储位置配置到redis中:settings.py

CACHES = {

"default": {

"BACKEND": "django_redis.cache.RedisCache",

"LOCATION": "redis://127.0.0.1:6379",

"OPTIONS": {

"CLIENT_CLASS": "django_redis.client.DefaultClient",

"CONNECTION_POOL_KWARGS": {"max_connections": 100}

}

}

}

# 2.操作cache模块直接操作缓存:views.py

from django.core.cache import cache # 结合配置文件实现插拔式

# 存放token,可以直接设置过期时间

cache.set('token', 'header.payload.signature', 10)

# 取出token

token = cache.get('token')

# 加载django环境

import os

import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "luffyapi.settings.dev")

django.setup()

from django.core.cache import cache

cache.set('name','hhh',10)

print(cache.get('name'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值