目录
- 一、🐇入门
- 1.key值
- 2.设置key的值
- 3.获取key对应的值
- 4.其它常用
- 5.使用场景
- 二.🐇Redis数据类型_List
- 1.常用命令
- 2.使用场景
- 三.🐇Redis数据类型_set
- 1.常用命令
- 2.使用场景
- 四.🐇Redis数据类型_Hash
- 1.常用命令
- 2.使用场景
- 五.🐇Redis数据类型_Zset
- 1.常用命令
- 2.使用场景
- 六.🐇Redis数据类型_Bitmaps
- 七.🐇Redis数据类型Geospatia
- 1.常用命令
- 2.使用场景
- 八.🐇Redis数据类型_Hyperloglog
- 1.常用命令
- 2.使用场景
一、🐇入门
1.key值
- keys:查看当前库中所有的key 。(不推荐使用)
- exists:判断某个key是否存在,返回1表示存在,0不存在。(如果是多个,则返回存在的个数)
- type:查看当前key 所储存的值的类型。返回当前key所储存的值的类型,如string 、list等。
- del:删除已存在的key,不存在的 key 会被忽略。
- expire:给key设置time秒的过期时间。设置成功返回 1 。 当 key 不存在返回 0。(适用于登录时,短信验证码)
- ttl:以秒为单位返回 key 的剩余过期时间
- persist:移除给定 key 的过期时间,使得 key 永不过期。
2.设置key的值
- 单一set: 用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。
- 多个mset:同时设置一个或多个 key-value 。
- setnx:只有在key不存在时设置key的值
- setex( set 和 expire的合体):给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过期时间。
3.获取key对应的值
- 单一get:用于获取指定 key 的值。如果 key 不存在,返回 nil
- 多个mget:返回所有(一个或多个)给定 key 的值。(如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil )
- getset:将给定key值设为value,并返回key的旧值(old value)
4.其它常用
- append:将给定的value追加到key原值末尾。(key存在且value是字符串才能追加,否则直接将给定key设为value)
- getrange:获取指定区间范围内的值,类似between…and 的关系(从0开始算)
- setrange:给定一个开始,从该位置开始替换字符串。
- incr:将 key 中储存的数字值增一。(常用于计算浏览人数或者平台粉丝数等)
tips:如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作。
- incrby/decrby key step:将key存储的数字值按照step进行增减。
- strlen:获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
5.使用场景
- value 除了是字符串以外还可以是数字。
- 计数器
- 统计多单位的数量
- 粉丝数
- 对象缓存存储
- 分布式锁
二.🐇Redis数据类型_List
List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。底层是一个双向链表,对两段操作性能极高,通过索引操作中间的节点性能较差。
一个list最多可以包含2^32 - 1个元素
1.常用命令
- lpush/rpush: 从左边(头部)/右边(尾部)插入一个或多个值。(返回list中一共有多少个值)
- lrange:返回key列表中的start和end之间的元素(包含start和end)。 其中 0 表示列表的第一个元素,-1表示
最后一个元素。
- lpop/rpop:移除并返回第一个值或最后一个值。
- lindex:获取列表index位置的值(从左开始)。
- llen: 获取列表长度
- lrem: 从左边开始删除与value相同的count个元素。
- linsert:在列表中value值的前边/后边插入一个new value值(从左开始)
- lset: 将索引为index的值设置为value
2.使用场景
- 消息队列
- 排行榜
- 最新列表
三.🐇Redis数据类型_set
与List类似是一个列表功能,但Set是自动排重的,String类型的无序集合,底层其实是一个value为null的hash表,所以添加、删除、查找的时间复杂度都是O(1)。
1.常用命令
- sadd:将一个或多个元素添加到集合key中,已经存在的元素将被忽略。
- smembers: 取出该集合的所有元素。
- sismember:判断集合key中是否含有value元素,如有返回1,否则返回0。
- scard:返回该集合的元素个数
- srem:删除集合中的一个或多个成员元素,不存在的成员元素会被忽略
- spop:随机删除集合中一个元素并返回该元素。
- srandmember:随机取出集合中count个元素,但不会删除。
- smove:将value元素从sourcekey集合移动到destinationkey集合中。
- sinter: 返回两个集合的交集元素。
- sunion: 返回两个集合的并集元素。
- sdiff:返回两个集合的差集元素(key1中的,不包含key2)
2.使用场景
- 黑白名单
- 随机展示
- 好友
- 关注人
- 粉丝
- 感兴趣的人集合
四.🐇Redis数据类型_Hash
Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash
特别适合用于存储对象。
Hash存储结构优化:如果field数量较少,存储结构优化为类数组结构;如果field数量较多,存储结构使用HashMap结构。
1.常用命令
- hset:给key集合中的field赋值value。
- hget:从key哈希中,取出field字段的值。
- hmset:批量设置哈希的字段及值(hset也是可以批量设置的)
- hexists:判断指定key中是否存在field
- hkeys:获取该哈希中所有的field
- hvals key:获取该哈希中所有的value
- hincrby:为哈希表key中的field字段的值加上增量increment。
- hdel:删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
- hsetnx:给key哈希表中不存在的的字段赋值 。
2.使用场景
- 购物车
- 存储对象
五.🐇Redis数据类型_Zset
Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数(score),这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的,但分数可以重复
1.常用命令
- zadd:将一个或多个元素(value)及分数(score)加入到有序集key中。
- zrange:返回key集合中的索引start和索引end之间的元素(包含start和end)。[withscores]携带分数
- zrangebyscore:返回key集合中的分数minscore 和分数maxscore 之间的元素(包含minscore 和maxscore )。其中元 素的位置按分数值递增(从小到大)来排序。
- zincrby:为元素value的score加上increment的值。
- zrem:删除该集合下value的元素。
- zcount:统计该集合在minscore 到maxscore分数区间中元素的个数。
- zrank:返回value在集合中的排名,从0开始。
2.使用场景
- 延时队列
- 排行榜
- 限流
六.🐇Redis数据类型_Bitmaps
七.🐇Redis数据类型Geospatia
GEO,Geographic,地理信息的缩写。该类型就是元素的二维坐标,在地图上就是经纬度。Redis基于该
类型,提供了经纬度设置、查询、范围查询、距离查询、经纬度Hash等常见操作。
1.常用命令
- geoadd:用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。
- geopos: 从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回 nil
- geodist:用于返回两个给定位置之间的距离
- georadius:以给定的经纬度(longitude latitude)为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离(radius )的所有位置元素。
2.使用场景
- 附近的电影院
- 附近的好友
- 离最近的火锅店
八.🐇Redis数据类型_Hyperloglog
比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5.基数估计就是在
误差可接受的范围内,快速计算基数。
1.常用命令
pfadd: 将所有元素参数添加到 Hyperloglog 数据结构中,如果至少有一个元素被添加返回 1, 否则返回 0。
pfcount:计算Hyperloglog 近似基数,可以计算多个Hyperloglog ,统计基数总数。
pfmerge:将一个或多个Hyperloglog(sourcekey1) 合并成一个Hyperloglog (destkey )。
2.使用场景
基数不大,数据量不大就用不上,会有点大材小用浪费空间,有局限性,就是只能统计基数数量,而没办法去知道具体的内容是什么,和bitmap相比,属于两种特定统计情况,简单来说,HyperLogLog 去重比 bitmaps 方便很多,一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃。
- 网站PV统计
- 网站UV统计
- 统计访问量(IP数)
- 统计在线用户数
- 统计每天搜索不同词条的个数
- 统计文章真实阅读数