Redis是C语言开发的一个高性能键值对(key -value
) 内存数据库,能够用做数据库,缓存和消息中间件等。redis
特色数据库
做为内存数据库,它的性能很是优秀,数据存储在内存当中,读写速度很是快,支持并发10W QPS(每秒查询次数),单进程单线程,是线程安全的,采用IO多路复用机制。缓存
丰富的数据类型,支持字符串,散列,列表,集合,有序集合等,支持数据持久化。能够将内存中数据保存在磁盘中,重启时加载。安全
主从复制,哨兵,高可用,可用做分布式锁。能够做为消息中间件使用,支持发布订阅。数据结构
不一样于上一篇所说的数据类型都是指Redis中value值的类型
value经常使用数据结构类型:string、list、hash、set、sorted_set
并发
key 是一个字符串,在Redis中能够经过 key 来获取 Redis 中保存的数据
Redis是key-value型数据库
,分布式
redis 中的 key 是二进制安全的,这意味着能够用任何二进制值做为key,包括空字符串svg
key 值取值通常不要过长,在数据中查找这类 key 的计算成本较高,消耗内存。可是也不能太短,最好作到知名见意高并发
删除指定key
del key // 成功 1 失败 0
获取key是否存在
exists key // 存在 1 不存在 0
获取key类型
type key // 获取显示的是key对应value对应的数据结构的类型
时效性问题:
缓存雪崩:指某个时间段缓存中的key集体失效,形成了大流量直接访问到数据库,从而使数据库压力过大被压垮,expire key seconds
解决:缓存时间随机,使得它尽量分散,避免它们同时失效,通常来讲大热门的数据缓存时间设置长一些,没那么热门的设置短一些
缓存击穿:指一个很是热点的数据,不停的被高并发访问,当这个key在时效的瞬间,大流量直接穿透缓存打到了数据库上,就会形成数据库被压垮
解决:这些很是热点的key设置为永不过时 如:persist key
,其余方法如(互斥锁:集群下的SETNX 布隆过滤器等
)之后再讨论。
缓存穿透:查一个数据库不存在的数据,如用户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
获取全部key
keys pattern // 模糊查找
pattern匹配规则
* 匹配任意数量的任意符号
? 配合一个任意符号
[] 匹配一个指定符号
命令 | 介绍 |
---|---|
keys * | 查询全部,为空则(empty list or set) |
keys it* | 查询全部以it开头的 |
keys *ame | 查询全部以ame结尾 |
keys ??me | 查询全部前面两个字符任意,后面以me结尾 |
keys nam? | 查询全部以nam开头,最后一个字符任意 |
keys n[nm]e | 查询全部以n开头,以e结尾,中间包含一个字母,n或m |
为 key 更名
rename key newkey // 直接修改,当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。 renamenx key newkey // 仅当 newkey 不存在时,将 key 更名为 newkey 。
对全部 key 排序
sort key // 只是取出来排序返回结果,不会影响原来数据结构数据顺序
在Redis中随机返回一个 key
RANDOMKEY