redis数据库-3-1-django操作redis

###############   django操作redis    ###############

# django操作redis,
# 下载django-redis,pip install django-redis,
# 有了这个,就不需要自己写什么连接池了,django-redis会自动给我们创建连接池,但是需要配置一下,这种在django项目中就是这么做,但是自定义的也要会因为这个只能django项目用
# redis配置,
# django-redis 配置,可以配置多个
CACHES = {
    "default": {  # 一个redis连接
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://192.168.100.128:6379",  # redis的IP和端口
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 1000},  # 连接池最大连接数
            "PASSWORD": "ji10201749"  # 密码
        },
    },
}

# 有了这个配置就可以了,
# 使用的时候,直接引入,
from  django_redis import get_redis_connection
conn=get_redis_connection("default")

 

 ###############   redis操作购物车第一种结构    ###############

import redis
pool =redis.ConnectionPool(host='192.168.100.128',port=6379,password='ji10201749',max_connections=1000)
conn= redis.Redis(connection_pool=pool)

# v = conn.keys()  # 获取所有的key
# print(v)
# conn.flushall()  # 删除所有的key,清空

"""
购物车的数据结构:
用户id:6
shopping_car= {
    6:{
            11:{
                 "title":"python入门",
                 "src": XXX.png
            }
    }

}
"""

# 购买第一个商品:
# 怎么存储:
# conn.hset(字典名,key,value)
data_dict = {
            11:{
                 "title":"python入门",
                 "src":"XXX.png"
            }
    }
import json
conn.hset('shopping_car',6,json.dumps(data_dict))
# print(conn.hget("shopping_car",6))

# 购买第二个商品:
car = conn.hget("shopping_car",'6')  # 这个获取到是字节类型,
car_str = car.decode('utf-8')  # 这是转换为字符串类型
# print(v)
# print(type(v))  # 字符串类型

# 字节和字符串的转换,第二种方法:
# car_str = str(car,encoding='utf-8')
# print(car_str)
# car_byte = bytes(car_str,encoding='utf-8')
# print(car_byte)

car_dict = json.loads(car_str)
# print(car_dict)
# print(type(car_dict))  # 转换成字典,

car_dict["12"] ={
                 "title":"linux入门",
                 "src":"XXX.png"
            }
# print(car_dict)  # 这个时候就有两个了,
conn.hset('shopping_car','6',json.dumps(car_dict))  # 放入redis,

#########################################################################
# 所以每次更新都是把数据拿出来,然后再放进去,
# 但是这个流程有问题,

 

###############   redis操作数据库第二版    ###############

# redis操作购物车
import redis
pool =redis.ConnectionPool(host='192.168.100.128',port=6379,password='ji10201749',max_connections=1000)
conn= redis.Redis(connection_pool=pool)
# 第二种购物车的数据结构
'''
shopping_car_用户id_课程id={
    title:
    img:
    policy:{
        1:{'name':30天价格策略,price:299}
        2:{'name':30天价格策略,price:299}
        3:{'name':30天价格策略,price:299}        
    }
    defaulet_policy_id:
}
'''
shopping_car_key = 'shopping_car_{}_{}'
user_id=123
course_id=123
shopping_car_key=shopping_car_key.format(user_id,course_id)


policy={
1:{'name':" 30天价格策略","price":299},
2:{'name': "60天价格策略","price": 699},
3: {'name':" 90天价格策略","price": 999},
}
import json
conn.hmset(shopping_car_key,{
        "title":1,
        "img": "123.png",
        "policy": json.dumps(policy),
        "defaulet_policy_id":"1"
           })
# print(conn.hgetall(shopping_car_key))

shopping_car_key_all = shopping_car_key.format(user_id,'*')
all_key = conn.scan_iter(shopping_car_key_all)

shopping_car_list = []
for i in all_key:
    course_id = str(i,encoding='utf-8').split('_')[2]
    # print(course_id)
    course_info = {
        "title":str(conn.hget(i,"title"),encoding='utf-8'),
        "img":conn.hget(i,"img").decode("utf-8"),
        "policy":json.loads(conn.hget(i,"policy")),
        "default":conn.hget(i,"defaulet_policy_id").decode('utf-8')
    }
    shopping_car_list.append(course_info)
    print(type(course_info))
    print(course_info)
    print(json.dumps(course_info))

 

###############   结束线    ###############

 

###############   结束线    ###############

 

###############   结束线    ###############

posted @ 2020-03-01 15:48  技术改变命运Andy  阅读(1648)  评论(0编辑  收藏  举报