Redis的其他操作、celery

发布时间 2023-11-21 09:42:08作者: Way*yy

Redis的其他操作

'''
delete(*names)
exists(name)
keys(pattern='*')
expire(name ,time)
rename(src, dst)
move(name, db))
randomkey()
type(name)
'''
redis的key值,最大可以是多少? 
	# 最大不超过512M  一般 1KB
redis的value值,最大可以是多少? 
	# 最大不超过512M
# delete(*names) 删除我创建的key
conn.delete("girls")
# exists(name) key存在返回1不存在返回0
print(conn.exists("girls"))
# keys(pattern='*') 返回所有的key值
print(conn.keys())
# expire(name ,time) 5秒后删除该key
conn.expire("name", 5)
# rename(src, dst)修改名字
# move(name, db))将该key移动到另一个
conn.move("age", 1)
# randomkey() 随机获取一个key
print(conn.randomkey())
# type(name) 查看类型

Redis管道

# 事务的四大特性
    -原子性:要么都成功,要么都失败
    -一致性:数据前后要一致
    -隔离性:多个事务之间相互不影响
    -持久性:事务一旦完成,数据永久改变
 
# 关系型数据库,支持事务  
    
# redis 有没有事务?没有专门的事物,但是通过别的方式,可以实现事务的几个特性,所以咱们认为它具备事务
	-redis要支持事务,要完成事务的几大特性,需要使用管道来支持
    -单实例redis是支持管道的
    -集群模式下,不支持管道,就不支持事务
  
# Redis通过管道实现事务

    import redis

    conn = redis.Redis()
    # 没有使用事务
    conn.decrby("my_money", 10)

    l = [1, 2, 3]
    print(l[4])

    conn.incrby("zh_money", 10)
    """
        没有管道的情况,一旦失败,之前执行的 不会回退
    """


    # 通过管道实现事务
    pipeline = conn.pipeline(transaction=True)
    # 创建了一个管道,把命令都一个个放到管道中,先不执行,当执行execute,才执行管道中所有的命令
    pipeline.decrby("my_money", 10)
    l = [1, 2, 3, 4]
    print(l[0])

    pipeline.incrby("zh_money", 10)

    pipeline.execute()

    conn.close()

Django中使用Redis

通用方案

# 在utils中写一个池
import redis

POOL = redis.ConnectionPool(max_connections=20)
# 在要使用的地方,导入使用即可
	from utils.common_redis_pool import POLL


    def redis_dome(request):
        conn = redis.Redis(connection_pool=POLL, decode_responses=True)
        res = conn.incrby("count")
        return HttpResponse(f"你是我们的第{res}个用户")

第三方模块

pip install django-redis

# 配置文件配置
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}
            # "PASSWORD": "123",
        }
    },
}
# 在使用的位置导入使用
from django_redis import get_redis_connection


def redis_demo(request):
    conn = get_redis_connection()
    res = conn.incrby("")
    print(res)

    return HttpResponse(f'您是我们第:{res}个用户')

Django的缓存

redis数据存在内存中,放、取的速度都非常快,非常适合作缓存使用
	本来数据在mysql中,每次都查询,速度慢,把查询出来的数据,暂时存储到redis(缓存),下次请求再来,直接从redis中拿,速度就会很快
    
# Django中使用缓存
	配置文件配置(缓存位置:内存、文件中、Redis中)
            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}
                    # "PASSWORD": "123",
                }

    把数据放到缓存中(放到redis中)
    from django.core.cache import cache
    # 存
    cache.set(key,value可以是任意类型,过期时间)
        redis原本只支持5大数据类型,但是经过封装后可以放python的任意类型
        本质:pickle序列化--->bytes格式--->以redis字符串的形式放在了redis中
    # 取
    cache.get(key)
                
                
# 前后端分离中,使用 cache.set   cache.get   
# 前后端混合中
     可以整站缓存 
     可以要缓存一个页面
     可以缓存页面中的某个位置
# 可以缓存的位置:
     内存中
     本地文件中
     数据库中
     reids中 (咱们用的多)