关于redis
最初对于redis理解就是登陆,还有同事的接口防刷机制。
单点登录,过期时间就用到了redis。把sessionId作为value值,用户名作为key值存储,保证一个账号不被多个人登录
接口防刷机制:以key-value存储,用到了redis过期时间设置,快速计数来实现。
深度理解redis
redis是基于内存的高性能key-value数据库。
【脑补一下内存和硬盘。硬盘像车库,内存就是跑道所有程序的运行都在内存里面进行的,而硬盘用来存储数据,硬盘数据不直接跟cpu接触。其读写速度很慢,十几秒,效率低。
内存分为随机存储器(RAM)、只读存储器(ROM)、高速缓存(CACHE) 】
redis优缺点
- 其在内存中操作,性能很出色,每秒处理十万次的读写操作,是已知的最快的key-value的db 支持多种数据类型存储,
- 单个value最大值1GB 数据库容量受限制,只能是较小数据量的数据存储运算
- redis是单进程单线程。可能会有疑问为嘛还是运行这么快。在上面已经说了redis是完全基于内存的,数据结构简单,多路I/O复用技术。让redis能实现高并发。
redis分布式实现读写分离,分片
- 支持主从, Master 会将数据同步到 slave( slave不会反向同步 ),这样就基本读写分离了,Master写入,slave读取。
- 基于1,那么问题来了,如果 Master 数据有一部分没同步到 slave 。那么数据就没法获取到。
- 基于2,就出现了分片,对业务进行切割分片,每个片在分为 Master,slave进行读写分离
————-这些都只是暂时我的理解。可能有误。希望提出修正
redis使用场景
- 淘宝购物时,商品剩余件数—因为我觉得这是一个高并发的事件,在双十一抢购的时候。不可能每次去数据库查还剩余多少件,所以可以用redis来实现,以商品id作为key值,总数value,每次加入购物车或者直接购买减掉。
- 同理的阅读数,发布数,点赞数等
- 用于我之前说的会话缓存等
使用实例
比如发送验证码,要求每分钟每个电话号码只能一次请求。超过一次要提示获取验证码频繁。这个是高并发事件,如果每次都去查询数据库电话号码上一次请求时间看有没有大于一分钟。
此时可以用到redis
r
e
d
i
s
−
>
s
e
t
(
redis->set(
redis−>set(key,$value);以电话号码为key值,value为请求次数
r
e
d
i
s
−
>
e
x
p
i
r
e
A
t
(
redis->expireAt(
redis−>expireAt(key,3600);设置过期时间为一小时
linux关于redis
- 启用redis客户端 /usr/local/moa/redis/bin/redis-cli 或者 redis-cli
- 检测redis服务是否启动ping
- 获取redis里所有的key值 keys *
- 在redis写入数值 set key value
- 获取值 get key
- 删除值 del key
- 设置过期时间 expire key time (time是以秒为单位的)