面试时,问到了很多的redis,如何回答?

本文介绍Redis作为高性能非关系型数据库的应用,包括安装配置、常用命令详解及在Django项目中的集成方式。并展示了如何利用Redis进行数据缓存,提高应用性能。

帮助文档:http://www.runoob.com/redis/redis-conf.html

redis是前置数据库,缓冲数据库,也是非关系型数据库

性能高,读写速度快,读的速度是11万次/s,写的速度是8万1千次每秒

支持比较多的数据类型

如何安装django自带的安装:

sudo apt-get install redis-server 

sudo pip3 install django-redis 

启动redis-server 

在打开一个终端输入~$redis-cli在此界面输入命令

redis常用指令:

1.SET 赋值 key value 

例子:SET a  aaaa 

2.GET  获取值 key 

例子:GET a =>"aaaa"

3.DEL 删除 key 

例子:DEL a 

4.EXISTS 查询 key   没有值返回0,有值返回1 

5.EXPIRE 设置过期时间 key time  

key value 存在时返回1,否则返回0,以秒为单位

6.PEXPIRE key time  以毫秒为单位

7.TTL 显示过期时间 key  以毫秒为单位 

8、PTTL 显示过期时间 key  以毫秒为单位 

9、RENAME key Newkey  更改键名 

10.keys* 显示多有的键 

Django 中settings中的设置


在view.py中

from django.conf import settings 

def read_from_cache(request):

    key='user_id_of_a'

    value=cache.get(key)

    print(value)

    return (request,'test.html',{'show':value})

@cache_page(60*5)

def write_from_cache(request):

    key='user_id_of_a'

    cache.set(key,json.dumps("aaaa"),settings.NEVER

    print("OK")

    render(request,"test.html")


中间件MIDDLEWARE中第一行加了一句最后一行也加了一句

作为一个全栈缓存,不常用 

可以用到的地方

爬虫里同一个ip一段时间内限制访问






### Redis分布式锁面试常见问题及解答 #### 什么是Redis分布式锁? Redis分布式锁是一种用于协调多个进程或节点之间的访问控制机制,通常用来解决分布式环境下的资源竞争问题。它利用Redis的单线程特性和原子操作特性来实现高效的锁定机制[^4]。 #### 面试中可能问到的问题及其解答: 1. **如何实现一个简单的Redis分布式锁?** 可以通过`SETNX`命令或者`SET key value NX PX timeout`命令来实现。其中`NX`表示只有当键不存在才设置成功,而`PX timeout`则设置了过期间,防止死锁的发生。 ```python import redis r = redis.Redis(host='localhost', port=6379, db=0) def acquire_lock(lock_key, identifier, lock_timeout): return r.set(lock_key, identifier, nx=True, px=lock_timeout) def release_lock(lock_key, identifier): script = """ if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end """ return r.eval(script, 1, lock_key, identifier) ``` 2. **如果Redis分布式锁超了,但是任务还没有完成怎么办?** 这是一个非常经典的陷阱问题。可以通过引入租约续约机制,在任务执行过程中周期性地延长锁的有效期,直到任务完成为止。另外,可以使用像Redisson这样的高级库,其内置了自动续期的功能。 3. **为什么需要给锁加上过期间?** 加上过期间是为了避免因程序崩溃等原因造成的死锁现象。如果没有设定合理的过期间,则可能导致其他等待中的客户端永远无法获取该锁[^5]。 4. **Redis分布式锁有哪些潜在的风险?** 主要风险包括网络分区、主从复制延迟导致的一致性问题等。例如在网络发生分片的情况下,可能会有两个不同的实例都认为自己持有同一个锁;而在主从架构下,由于数据同步存在滞后性也可能引发类似情况[^4]。 5. **除了基本的加解锁外,还有什么需要注意的地方吗?** 应考虑异常处理逻辑(比如连接中断后的重新尝试),以及是否允许多次获取同一把锁(即所谓的可重入锁)。对于后者,某些第三方工具如前述提到过的Redisson已经很好地解决了这一需求[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值