Redis | 使用场景

redis的使用场景

一、计数器

能够对string进行自增和自减,从而实现计数器的功能。git

二、缓存

将热点数据缓存起来,同时设置内存的最大使用量和淘汰策略来保证缓存的命中率。web

三、session服务器

使用redis做为统一的session服务器,则后端能够进行集群部署。redis

四、分布式锁的实现

在分布式场景下,没法使用单机环境下的锁来实现对多个节点上的进程进行同步,可使用redis的SETNX(SET If Not Exists)命令,来实现分布式锁。算法

问题:在执行setnx以后执行expire以前用户进程意外crash,这个锁不久永远得不到释放了吗?后端

set指令有很是复杂的参数,能够同时把setnx和expire合成一条指令来用的!缓存

多个进程执行如下Redis命令:服务器

SETNX lock.foo <current Unix time + lock timeout + 1>session

  • 若是 SETNX 返回1,说明该进程得到锁,SETNX将键 lock.foo 的值设置为锁的超时时间(当前时间 + 锁的有效时间)。
  • 若是 SETNX 返回0,说明其余进程已经得到了锁,进程不能进入临界区。进程能够在一个循环中不断地尝试 SETNX 操做,以得到锁。

五、共同好友

Set能够实现交集、并集等操做,从而实现共同好友等功能;编辑器

sadd key value  //往集合添加元素,key是指向一个set
sinter key1 key2 ... //查询集合的交集
复制代码

六、排行榜

ZSet能够实现有序性操做,从而实现排行榜等功能;(以访问量为分数进行排列)分布式

七、附近的人、店铺

geohash地理空间索引。

  • GEOADD: 将给定的位置对象(纬度、经度、名字)添加到指定的key;
  • GEOPOS: 从key里面返回全部给定位置对象的位置(经度和纬度);
  • GEODIST: 返回两个给定位置之间的距离;
  • GEOHASH: 返回一个或多个位置对象的Geohash表示;
  • GEORADIUS: 以给定的经纬度为中心,返回目标集合中与中心的距离不超过给定最大距离的全部位置对象;
  • GEORADIUSBYMEMBER: 以给定的位置对象为中心,返回与其距离不超过给定最大距离的全部位置对象。
geoadd key longitude latitude member  //经度-维度-成员,添加到指定的集合中。能够一个省一个集合
 geoadd beijing 116.182881 39.72877 良乡大学城北 geoadd beijing 116.182881 39.72877 良乡大学城南 geoadd beijing 116.318427 39.986771 新东方大厦 geoadd beijing 116.319873 39.987953 中钢大厦  geodist 返回两个位置之间的距离 geodist beijing 新东方大厦 良乡大学城北 m //m为距离单位,km,mi,ft  geopos 返回指定位置的经纬度 geopos beijing 新东方大厦  georadius 返回以给定的经纬度为中心,长度范围内的成员。 georadius beijing 116.3180199 39.398575 100 km withcoord //withcoord指定返回的格式  georadiusbymember 返回指定成员长度范围内的其余成员。(能够实现附近的人) georadiusbymember beijing 新东方大厦 20 km 复制代码

八、基数统计

  • HyperLogLog 是用来作基数估计的算法(是会存在误差的)
  • HyperLogLog 的优势是,在输入元素的数量或者体积很是很是大时, 计算基数所需的空间老是固定的、而且是很小的。
  • 和布隆过滤器同样,HyperLogLog一样 不存储元数据,只作统计信息。
  • HyperLogLog是一种算法,并非redis都用,是不过redis帮咱们封装好了而已;
  • 在 Redis 里面,每一个 HyperLogLog 键只须要花费 12 KB 内存,就能够计算接近 2^64 个不一样元素的基数。
  • **什么是基数:**好比数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在偏差可接受的范围内,快速计算基数。

若是用set做统计,须要保护海量的数据,那内存还不炸了;

位图也能够作统计,尽管相比set内存消耗要少一些,但内存的消耗量仍是不少;

pfadd key element //添加元素到指定的HyperLogLog,不存在则返回1,存在则返回0
pfcount key //返回HyperLogLog的基数估算值
pfmerge key1 key2 ...//将多个HyperLogLog合并成一个
复制代码

通常使用:统计数据量大,单条数据占用内存也大的状况,且容许存在偏差。

  • 统计注册 IP 数 (一个ip,4byte)
  • 统计每日访问 IP 数
  • 统计用户天天搜索不一样词条的个数(词条就更大了)

本文使用 mdnice 排版

相关文章
相关标签/搜索