Redis简介
Redis是一种支持Key-Value等多种数据结构的存储系统。可用作数据库、缓存、消息中间件或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
特点:
作为内存数据库,它的性能非常优秀,数据存储在内存当中,读写速度非常快,支持并发10W QPS(每秒查询次数),单进程单线程,是线程安全的,采用IO多路复用机制。
丰富的数据类型,支持字符串,散列,列表,集合,有序集合等,支持数据持久化。可以将内存中数据保存在磁盘中,重启时加载。
主从复制,哨兵,高可用,可用作分布式锁。可以作为消息中间件使用,支持发布订阅。
Redis通用命令操作
key是什么?
key 是一个字符串,在Redis中可以通过 key 来获取 Redis 中保存的数据,Redis是key-value型数据库,redis 中的 key 是二进制安全的,这意味着可以用任何二进制值作为key,包括空字符串。
key 值取值一般不要过长,在数据中查找这类 key 的计算成本较高,消耗内存。但是也不能过短,最好做到知名见意。
针对key的一些常用操作
1. 对于key的自身状态控制的相关操作:
删除指定key
del key // 成功 1 失败 0
获取key是否存在
exists key // 存在 1 不存在 0
获取key类型
type key // 获取显示的是key对应value对应的数据结构的类型
2. 对于key的时效性相关操作:
时效性问题:
缓存雪崩:指某个时间段缓存中的key集体失效,造成了大流量直接访问到数据库,从而使数据库压力过大被压垮,expire key seconds
解决:缓存时间随机,使得它尽可能分散,避免它们同时失效,一般来说大热门的数据缓存时间设置长一些,没那么热门的设置短一些
缓存击穿:指一个非常热点的数据,不停的被高并发访问,当这个key在时效的瞬间,大流量直接穿透缓存打到了数据库上,就会造成数据库被压垮
解决:这些非常热点的key设置为永不过期 如:persist key
缓存穿透:查一个数据库不存在的数据,如用户ID为 -1
解决:缓存空值,数据库查询为空的也放到缓存,然后设置一个较短的过期时间expire key seconds 如 60s
为指定key设定有效期
expire key seconds // 以秒计 成功 1 失败 0
pexpire key milliseconds // 以毫秒计...
expireat key timestamp // EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳。
pexpireat key milliseconds-timestamp // 设置 key 过期时间的 UNIX 时间戳 以毫秒计
获取key的有效时间
查看某个key的剩余过期时间,返回值:
为 -2 表示这个key已经过期,删除掉
为 -1 表示没有设置过期时间
其它 表示剩余的生存时间,单位为秒
ttl key // 以秒为单位pttl key // 以毫秒为单位
切换key的时效性为永久
persist key // 成功 1 失败 0
3. 对于key的查询检索相关操作:
获取所有key
keys pattern // 模糊查找
pattern匹配规则
* 匹配任意数量的任意符号
? 配合一个任意符号
[] 匹配一个指定符号
4. 对于key的其他操作:
为 key 改名:
rename key newkey // 直接修改,当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。
renamenx key newkey // 仅当 newkey 不存在时,将 key 改名为 newkey 。
对所有 key 排序:
sort key // 只是取出来排序返回结果,不会影响原来数据结构数据顺序
在Redis中随机返回一个 key
RANDOMKEY
领取专属 10元无门槛券
私享最新 技术干货