redis数据库的使用、和python的交互

本文详细介绍了redis数据库的使用,包括修改密码、登录、基本操作及不同数据类型如string、list、hash、set和zset的操作。同时讲解了如何在Python中与redis交互,通过redis包和django_redis包实现缓存操作。

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

redis数据库使用

django中使用redis要先进行配置,详情看:https://blog.youkuaiyun.com/paul0926/article/details/90725827
非关系型数据库,数据存储格式是键值结构,值得部分可分为5种:

  • 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)

修改密码和登录

修改密码:

1.找到redis配置信息文件,如/etc/redis.conf
2.找到 # requirepass foobared.   并去掉注释,后面的foobared改成你的密码。如:requirepass my_redis
3.重启redis, sudo service redid restart.(或者这样重启:sudo service redid restart, sudo redis-server /etc/redis.conf)

登录:

1.如果直接 redis-cli. 登陆,没密码,那么你能登陆,但无任何操作权限
2.用密码登陆。redis-cli -h 127.0.0.1 -p 6379 -a my_redis.   才能有权限操作
3.先redis-cli登陆,此时没有操作权限,再输入:AUTH your_password. 同样可以完成认证

redis基本操作

redis基本操作(终端):

命令 含义

  • del key 删除key
  • keys * 所有键
  • get name 获取name这个键的值
  • del name 删除name
  • set name “wuanger” 创建“wuanger”,键为name
  • select 2 表示切换到2库,注:Django的cache是存在1库的(上面设置的),进入redis的时候默认是0库的
  • TTL name 查看剩余过期时间
  • EXPIRE name 300 设置name的过期时间为300秒
  • type name 查看name的属性(总共:string, list, hash, set,zset)

string语法格式

创建:set key value:key是唯一的,不存在就创建,存在则覆盖

(django_py3) python@ubuntu:~/Desktop/shanghuishop/shanghuishop$ redis-cli
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> keys *
1) "name"
2) ":1:django.contrib.sessions.cache3hly23rlbdca4zoerfls1z2uusyc09zw"
127.0.0.1:6379> get name
"xiaoming"

删除:del key删除指定的键名

127.0.0.1:6379> del name
(integer) 1

设置带有过期时间的:setex key time value时间单位为秒

127.0.0.1:6379> setex name 15 tom
OK
127.0.0.1:6379> keys *
1) "name"

设置多个键值对:mset key1 value1 key2 value2
给对应键值追加内容:append key value
一次获取多个值:mget key1 key2
删除当前数据库:flushdb
删除所有数据库:flushall

list语法格式

左插入:lpush 列表名 值1 值2 …
左插入意思是每个值都是往左边插入,即与我们输入的值顺序相反
下面插入实际上列表顺序为:java c++ python

127.0.0.1:6379> lpush project python c++ java
(integer) 3
127.0.0.1:6379> lrange project 0 1
1) "java"
2) "c++"

右插入:rpush插入内容,插入顺序和显示顺序一致,显示所有为:
lrange project 0 -1
追加内容:linsert 列表名 before(after)

127.0.0.1:6379> linsert project before c++ php
(integer) 4

hash 哈希(类似于python的字典)

操作 含义

  • hset hash_name key1 val1 hash_name = {key1: val1}
  • hmset hash_name key1 val1 key2 val2 hash_name = {key1: val1, key2:
    val2}
  • hget hash_name key1 获取key1
  • hmget hash_name key1 key2 获取多个key
  • hgetall hash_name 获取所有key
  • hkeys hash_name 获取所有的key
  • hvals hash_name 获取所有的val
  • hdel hash_name key 删除hash_name中的key

set 集合(存储不重复的值,无序)

操作 含义

  • sadd set1 val1 val2 添加一个set1集合里的值val1,val2
  • srem set1 val1 从set1中移除val1
  • smembers set1 set1的成员
  • sismember set1 val1 查看val1是否在set1里,是返回1,否返回0
  • sinter set1 set2 求交集
  • sunion set1 set2 求并集
  • sdiff set1 set2 求差集

zset(有序集合)

操作 含义

  • zadd zset1 score member 创建、添加一个zset1,member的分数是score(int)
  • zrangebyscore zset1 0 100
  • withscores 得出zset1中分数score在0-100的member,score从小到大,后面的withscores是带score输出
  • zrevrangebyscore zset1 100 0 从大到小输出
  • zrange zset1 2 4 获取zset1中序号为3,4的member
  • zrank zset1 a zset1中成员a的序号
  • zrem zset1 a 移除zset1中的a
  • zcount zset1 1 6 获取score为1-6之间的member数量

redis和python的交互

推荐使用redis包或者django_redis生成一个可操作对象,然后进行操作,语法就是上面的。

用redis包

from redis import StrictRedis
        # 创建redis对象,设置数据库
        sr = StrictRedis(host='localhost', port=6379, db=12)
        # 2.要保存验证码上的文字部分,key为uuid,值为text,第三个参数是保存时间单位为秒
        sr.set(uuid, text, 60)

使用pipe管道,意思是最后一起执行操作

# 3.生成短信验证码
    msg = '%04d' % random.randint(0, 9999)
    # 4.保存短信验证码到redis
    conn = StrictRedis(host='localhost', port=6379, db=12)
# pipe管道,最后一起执行
    pipe = conn.pipeline()
    pipe.setex('%s_code' % phone, constants.PHONE_CODE_REDIS_EXPIRES, msg)
    pipe.setex('%s_flag' % phone, constants.PHONE_FLAG_REDIS_EXPIRES, 1)
    pipe.execute()

用django_redis包

# 在python中导入包
from django_redis import get_redis_connection
# 创建一个用于操作的对象,这个参数是指定设置的数据库,在设置文件里的
con = get_redis_connection('validate')
# 通过con可以对redis数据库进行增删改查的操作。
# 如插入、查询列表:
con.lpush('user', '赵四')
# con.setex(key, value, time)# 这个是设置过期时间
res = con.lrange('user', 0, -1)

这是在serializers.py文件里的验证方法里使用redis:

uuid = attrs['uuid']
# 创建redis对象,与数据库对比
redis_con_obj = get_redis_connection('validate')
# 取出文字,UUIDFiled为uuid类型,redis取出为bytes类型
img_text = redis_con_obj.get('%s' % uuid)
print(img_text, '222222222222')
if not img_text:
    log.error('本地没有对应图片验证码')
    raise serializers.ValidationError('本地没有对应图片验证码')

cache方法

from django.core.cache import cache
    # read cache user id
    def read_from_cache(self, user_name):
        key = 'user_id_of_' + user_name
        value = cache.get(key)
        if value == None:
            data = None
        else:
            data = json.loads(value)
        return data

    # write cache user id
    def write_to_cache(self, user_name):
        key = 'user_id_of_' + user_name
        cache.set(key, json.dumps(user_name), settings.NEVER_REDIS_TIMEOUT)

restful

放版本号,不要放动词

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值