因为一次redis缓存穿透,全面探究redis能做什么( 二 )
由此可以总结 , redis有以下几特性:
- 内存存储 , 支持更丰富的数据类型
- Zset数据结构可以用来做排行榜 , Zset是一种排序的set集合 , 可以快速定位到top N
- 利用set集合的一些命令 , 可以获取好友关系 , 比如求交集、并集、差集等 。
- 支持持久化(rdb、aof):RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储;AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写 , 使得AOF文件的体积不至于过大 。
- 发布订阅 , 可以用作队列 , list的push和pop可以实现简单的队列或栈结构 。 比如lpush从左边插入 , lpop从左边取 , 就是后进先出的一种栈结构;如果lpush进入 , rpop出去 , 又是队列结构 。
文章插图
文章插图
- 地图分析geospatial
GEODIST计算两个城市间距离 , 可以指定单位千米或者英尺
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"(integer) 2redis>。Sicily Palermo Catania"166274.15156960039"redis> GEODIST Sicily Palermo Catania km"166.27415156960038"redis> GEODIST Sicily Palermo Catania mi"103.31822459492736"redis> GEODIST Sicily Foo Bar(nil)redis>
- 计时器、计算器/限速器 , 利用Redis中原子性的自增操作 , 我们可以统计类似用户点赞数、用户访问数等 , 这类操作如果用MySQL , 频繁的读写会带来相当大的压力
- 主从复制-哨兵模式
- 分布式锁
/*** 加锁* @param key redis key* @param expire 过期时间 , 单位秒* @return true:加锁成功 , false , 加锁失败*/publicboolean lock(String key, int expire) {byte [] byteKey = fst.serialize(DEFAULT_CACHE_NAME+ "_" +key);byte [] byteVal = fst.serialize("1");long status = jedisCluster.setnx(byteKey, byteVal);//1.setnx , 成功返回1失败返回0if(status == 1) {//2.返回结果为1 , 设置超时时间 , 加锁成功jedisCluster.expire(byteKey, expire);return true;}//3.返回结果为0 , 加锁失败return false;}
Redis为什么能做这些上面说了Redis的一些使用场景 , 那么这些场景的解决方案也有很多其它选择 , 比如缓存可以用Memcache , Session共享还能用MySql来实现 , 消息队列可以用RabbitMQ , 我们为什么一定要用Redis呢?【因为一次redis缓存穿透,全面探究redis能做什么】那是因为Redis执行速度快:
速度快 , 完全基于内存;
使用C语言实现 , 网络层使用epoll解决高并发问题;
单线程模型避免了不必要的上下文切换及竞争条件;
注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求 , 像持久化它就会重开一个线程/进程去进行处理 。
#Redis#
推荐阅读
- Satechi推出Dock5多设备充电站 一次可同时充五种设备
- 富士康 拜腾再续“前缘”,原来是因为这个
- 最壕“年终奖”出炉!雷军下血本:一次颁发两个百万美金技术大奖
- 有没有必要给老年人买台智能手机?
- 无线网络联盟:Wi-Fi 6E是二十年来最重大的一次升级
- 让35亿人用上5G!美巨头突然宣布,华为这一次也落后了?
- 中国移动又开始了一次奇怪尝试
- 芯片巨头推出5G新品,拿下9个第一次,全球35亿人集体受益
- 30天自制操作系统:第一天
- 2020年的手机渠道商:因为华为缺货,赚的盆满钵满