windows 安装 Redis
- 在任务栏搜索
启用或关闭Windows功能
- 选择
适用于Linux的Windows子系统
- 在应用商店安装
Ubuntu
- 安装编译环境
- 安装
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
sudo make install
sudo cp redis.conf /etc/redis.conf
- 启动
cd /usr/local/bin
redis-server /etc/redis.conf
redis-server /etc/redis.conf & #指定配置文件启动redis,且后台启动
安全配置
redis.conf
来禁用远程修改 DB 文件地址
禁止外网访问 Redis
使用
字符串(String)
可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等,最多可以容纳的数据长度是512M
set mykey "this is a test" //通过set命令为键设置新值,并覆盖原有值。
get mykey
incr mykey //该Key的值递增1
decr mykey //该Key的值递减1
del mykey //删除已有键
哈希(Hash)
键值对字典结构
列表(List)
简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
集合(Set)
是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
有序集合(sorted set)
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
使用问题
雪崩
指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。
解决办法:
- 将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。
- 简单粗暴,让Redis数据永不过期(如果业务准许,比如不用更新的名单类)。当然,如果业务数据准许的情况下可以,比如中奖名单用户,每期用户开奖后,名单不可能会变了,无需更新。
缓存穿透
指访问不存在的数据,导致跳过缓存,直接访问数据库。
例如:数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。
解决办法:
- 每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN。然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。
缓存击穿
就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
解决办法:
- 可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。
转载请保留原文链接: https://zodream.cn/blog/id/125.html