一、redis和memcached的区别
redis支持持久化和多种数据类型,不止key-value类型
二、redis默认端口号:6379
三、redis是单线程+多路IO复用
四、redis五大数据类型:string、list、set、hash、zset
存储的数据类型为bean的可以使用hash
存储排行榜可以使用zset,默认降序排列,每个value都有一个score
五、redis事务
1、watch、multi、exec、discard
watch 键:监控某个键,如果这个键在exec之前改变,则执行exec失败返回nil。执行exec或unwatch取消watch
mutli:组队
discard:取消组队
exec:执行。在执行时,失败的自动跳过执行下一个命令,一个失败不影响其他
2、传统型数据库使用悲观锁,读写时加锁,有其他线程也想读写先阻塞,等解锁后才能操作。redis使用乐观锁,获得一个版本号。若修改时版本号与原版本号不同则失败
3、redis事务三特性:单独的隔离操作、没有隔离级别的概念、不保证原子性
六、秒杀
redis+lua脚本
七、redis删除过期键方式
定期删除+惰性删除/
定期删除:每隔一段时间从库中随机取一定数量的键,判断键的过期时间,过期删除
惰性删除:当手动取值时,判断是否过期,过期删除并返回空
八、如何保证Redis中的数据都是热点数据(redis有哪些数据淘汰策略?)
redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略(回收策略)。redis 提供 6种数据淘汰策略(key的淘汰策略):
1、volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
2、volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
3、volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
4、allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
5、allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
6、no-enviction(驱逐):禁止驱逐数据
lru:least recently used
ttl:time to live
通过.conf配置文件可以进行修改,默认使用volatile-lru模式
可以使用命令object idletime 键 来查询某个键的空转时间
九、redis如何解决并发
setnx和getset方法
十、持久化两种方式
RDB内存快照(默认)和AOF日志文件
十一、redis除了做缓存还能做什么?
1、排行榜
2、使用incr计算点击量的计数器