本文主要包括:
- 什么是Redis
- Redis有哪些优缺点
- 为什么要用 Redis 而不用 map/guava 做缓存?
- Redis为什么这么快
- Redis的应用场景
- Redis持久化
- Redis踩的坑
概述
什么是Redis
Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。
Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
数据类型
Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求
以上可以参考Redis 常见面试题
Redis踩的坑
最近在测试任务的时候,把reids的key和value写反了,导致生产环境的reids凭空多了200多万脏数据,在网上查了一个批量删除的命令,直接在生产环境执行了,导致redis宕机、OOM了
所以,以后再操作生产环境数据库,特别是删除、大规模数据遍历、消耗性能比较大的情况下,在网上查的命令最好还是在测试环境测试一下再用,多么痛的领悟
这里记录一下两个命令:
错误的命令
在数据量较大的情况下,千万别用类似keys *的操作,keys会把reids里所有的key一口气都遍历一遍,消耗性能奇高。。
redis-cli -h ${ip} -p 6379 -n 4 -a '${pws}' keys '0^!*' |xargs redis-cli -h ${ip} -p 6379 -n 4 -a '${psw}' DEL
正确的命令:
在生产环境下,尽量使用scan
redis-cli -h ${ip} -p 6379 -n 4 -a '${psw}' --scan --pattern "0^!*" | xargs -L 1000 redis-cli -h ${ip} -p 6379 -n 4 -a '${psw}' del
具体可以参考:Redis 千万不要乱用KEYS命令,不然会挨打的