redis
一 String (字符)
常用命令
1:set 添加一个值
2: get 获得一个值
3: mset 添加一组值
4: mget 获得一组值
5: incr 自增++
6: incrby 自增 指定 +?的数字
7: decr 自减
8: decrby 自减 指定 +?的数字
9: strlen 字符长度
10: setnx key不存的时候才创建key
实现案例
1: 点击阅读量 用 incr (中小型 因为超过10W 就不能自增了)
二 hash (散列类型 )
(类似(Map<String,Map<Object,Object>>))
常用命令
1: hset 设置一个键值对
2: hget 获得一个键值对
3: hmset 设置一组键值对
4: hmget 获得一组键值对
5: hgetall 获得所有键值对
6: hlen 获得某个key键值对的数量
7: hdel 删除
实现案例
1: 电商购物车 可以用这个散列来做 但是适合 中小型公司
三 set (集合)
常用命令
1: sadd 添加一个元素
2: srem 删除一个元素
3: smembers 遍历所有元素
4: sismember 判断元素是否存在
5: scard 元素总和
6: srandmember 随机弹出一个元素(不会删除)
7: spop 随机弹出一个元素并且删除
8: sdiff 以第一个集合为基准 取与第二个集合不存在的元素
9: sinter 求两个集合的交集
10: sunion 两个集合合并
实现案例
1: 微信抽奖
2:朋友圈点赞
3:共同关注的人
4: 内推可能认识的人
四 zset (有序集合)
常用命令
1: zadd 添加一个元素
2 : zrange 获取下标范围的元素(按照分数从小到大)
3: zscore 获取分数
4: zrem 删除元素
5: zrangebyscore 获取指定分数范围的元素
6: zincrby 增加元素的分数
7: zcard 统计元素的个数
8: zcount 指定分数的内的元素个数
9: zremrangebyrank 按照排名删除指定 的范围
10: zrank 从小到大
11: zrevrank 从大到小
实现案例
1 商品热门排名
2 抖音热搜
五 list(列表)
常用命令
1: lpush 向左添加一个元素
2: rpush 向右添加一个元素
3: lrang 查看列表 范围
4:llen 列表中 元素的个数
实现案例
1 微信公众号订阅
2 商品评论
六 bitmap(位图)
常用命令
1: setbit key offset value
2: getbit key offset
底层实际类型为 string 是一个 最大 有2^32 大小 最终是变声ascii 编码 只能标记为 0 1 使用 二值统计的时候可以考虑 , 动态扩容 每次 一个byte
实现案例
1: 案例 签到 这里 可以 以每个人为key 然后需要 365位 就够了 如果这个人来的 就设置位1 没来 就不用 变更
2:统计日活 把用户id 在映射车bitmap 的 下标 key 位 日期 然后 可以统计日活 ,如果 公司业务不是特别大 也可 统计UV 太大不建议使用 因为 这个每天产生的数据累加 很可怕
3: 电影的播放量 广告是否被点击 等等 那种需要 确定 是 和 否的 工作都可以考虑一下 但是 要在 用户量的前提下
七 hyperLogLog(统计)
常用命令
1: pfadd 添加元素
2: pfcount 获取数量
3: pfmerge 合并两个集合并且去重
实现案例
hyperloglog 是一种算法 本身不会存入任何数据 不会带来 数据膨胀的问题 这样就很好解决 使用bitmap 取 统计 uv 出现的数据膨胀问题 但是 同时这个 不是精确 统计 根据 redis 文档说明 精度误差大概在 0.81% 如果可以 容忍 这么大小的误差 可以说这个是一个很好的选择 如果 想 深入了解请自行查阅资料
1: uv 的统计 统计每个独立ip 一天的 单个登录
八 GEO(地理)
常用命令
底层数据 格式位zset 如果出现中文乱码 可以 使用 redis-cli --raw 来进入redis
1: geoadd 添加一个元素 key 经度 维度 位置名称
2: geopos 从键里面返回锁给定的位置
3: geodist 返回两个给定位置之间的距离
4: georadius 以给定的纬度为中心 返回与中心距离不超过给定最大距离的所有位置元素
5:geohash 返回一个或者多个位置
实现案例
1: 这个案例就很好想了 第一个就是类似美团的哪个周围 500m 范围内的商家
2:找酒店等等
九 stream(没人用)
功能
http://doc.redisfans.com/ 命令大全
命令不区分大小写,而key是区分大小写的