枸杞网站的建设方案,吕梁推广型网站开发,西安seo排名扣费,求做网站的【大家好#xff0c;我是爱干饭的猿#xff0c;本文重点介绍Redis7 十大数据类型。
后续会继续分享Redis7和其他重要知识点总结#xff0c;如果喜欢这篇文章#xff0c;点个赞#x1f44d;#xff0c;关注一下吧】
上一篇文章#xff1a;《【Redis7】Redis7概述、安装… 【大家好我是爱干饭的猿本文重点介绍Redis7 十大数据类型。
后续会继续分享Redis7和其他重要知识点总结如果喜欢这篇文章点个赞关注一下吧】
上一篇文章《【Redis7】Redis7概述、安装和卸载 》 目录
0. Redis 键key
1. Redis 字符串String
2. Redis列表(List)
3. Redis哈希Hash
4. Redis集合Set
5. Reids有序集合Zset
6. Redis位图(bitmap)
8. Redis地理空间(GEO)
9. Redis流Stream
10. Redis位域(bitfield) 0. Redis 键key keys * //展示当前库的所有key exists key //判断某个key是否存在 type key //查看你的key是什么类型 del key //删除指定的key数据 unlink key //非阻塞删除仅仅将keys从keyspace元数据中删除没真正的删除会在后续异步中操作 ttl key //查看还有多少秒过期 -1表示永不过期 -2 表示已过期 expire key 秒 //给key设置过期时间 move key [0-15] // 将当前数据库的key移动到指定的数据库中redis默认是有16个数据库的 select [0-15] // 切换数据库[0-15]默认为0 dbsize // 查看当前数据库key的数量 flushdb // 清空当前库 flushall // 清空16个数据库 慎用 命令不区分大小写而key的值是区分大小写的
help 数据类型 会出现命令提示 比如 help string
1. Redis 字符串String string是redis最基本的类型一个key对应一个value。string类型是二进制安全的意思是redis的string可以包含任何数据比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型一个redis中字符串value最多可以是512M常用命令
set key value ex 20 // 设置值 20秒过期
get key // 获得对应的值同时设置/获取多个键值
mset [key1] [value1] [key2] [value2] [key3] [value3] // 同时设置一个或多个键值对
mget [key1] [key2] [key3] // 同时获取多个key的值
msetnx [key1] [value1] [key2] [value2] // 同时设置一个或多个 key-value 对 必须保证key都不存在才能成功获取指定区间
getrange [key] 0 -1 // 获取这个key的值的全部
getrange [key] 0 2 // 获取这个key的值索引0到索引2之间的值
getrange [key] 1 xxx // 设置指定区间范围内的值数值增减
incr [key] // 递增数字 1
incr [key] [increment] // 增加指定的整数 increment
decr [key] // 递减数字 -1
decr [key] [increment] // 减少指定的整数 -increment 获取字符串长度和内容相加
strlen [key] // 获取key对应的值的长度
append [key] [vale] // 添加字符串内容分布式锁
setex [key] [过期时间] [value] // 设置带过期时间的key动态设置
setex [key] [value] // 只有在 key 不存在时设置 key 的值。
set [key] [value] get // 给定 key 的值设为 value 并返回 key 的旧值
getset [key] [value] // 给定 key 的值设为 value 并返回 key 的旧值
应用场景
dy点赞某个视频或商品点一次加一次 -incr key对于文章是否喜欢 -incr key
2. Redis列表(List)
单key多vlue
结构
一个双端链表的结构容量是2的32次方减1个元素大概40多亿主要功能有push/pop等一般用在栈、队列、消息队列等场景left、right都可以插入添加 如果键不存在创建新的链表如果键已存在新增内容如果键全移除对应的键也就消失了底层就是个双向链表对两端的操作性能很高通过索引下标的操作中间的节点性能会较差常用命令
lpush [key] [value] ... // 往 列表头部左边放入元素
Rpush [key] [value] ... // 往 列表右边放入元素
lrange [key] 0 -1 // 从左边开始遍历列表 只能从左边遍历
lpop [key] // 最左边的出栈 也就是lrange遍历的第一个
rpop [key] // 最右边的出栈 也就是lrange遍历的最后一个
lindex [key] [index] // 通过索引值获取值
llen [key] // 获得元素个数
lrem [key] [num] [value] // 从左往右删除 num个值为 value的值
lrem [key] 0 [value] // 从左往右删除所有值为value的值
ltrim [key] [开始] [结束] // 截取指定范围的值后再赋给[key]也就是删除这个区间外的值
rpoplpush [key1] [key2] [value] //移除列表的最后一个元素并将该元素添加到另一个列表的第一个并返回
lset [key] [index] [value] //将key的第 index 个索引值改为value
linsert [key] brfore/after [value1] [value2] // 在list某个已有值的前后再添加具体值 应用场景
公众号的订阅的消息关注的人发布文章就会到我的List lpush likearticle:id 文章id查看自己订阅的文章 lrange likearticle:id 0 9
3. Redis哈希Hash
k-v 模式不变但v是一个键值对 MapString,MapObject,Object
常用命令
hset/hget/hmset/hmget/hgetall/hdel 和set类似不过多赘述
hlen // 获取在某个key内的全部数量
hexists [key] [k1] // 看key中是否有k1这个键
hkeys [key] // 获取key里面的所有key
hvals [key] // 获取key里面的所有value
hincrby [key] k1 [num] // key里面k1的值增长num 整数
hincrbyfloat [key] k1 [num] // key里面k1的值增长num 小数
hsetnx [key] k1 [value] // 不存在赋值存在了无效\
应用场景
早期购物车设计基本不用了中小厂可用
4. Redis集合Set
单值多value无重复
常用命令
SADD key member ... // 添加元素
SMEMBERS key // 遍历集合中所有元素
SISMEMBER key member // 判断元素是否在集合中
SREM key member ... // 删除元素
SCARD key // 获取集合长度
SRANDMEMBER key m // 从set集合里面随机取出m个 如果超过最大数量就全部取出 如果写的值是负数比如-3 表示需要取出3个但是可能会有重复值 不会删除
SPOP key m // 从集合中随即弹出一个元素 出一个删一个
SMOVE key1 key2 在key1里已存在的某个值 // 将key1的已存在的某个值赋给key2
集合运算
SDIFF keyA keyB // A - B 属于A但不属于B的元素构成的集合
SUNION keyA keyB // A U B 属于A或者属于B的元素合并后的
SINTER keyA keyB // A ∩ B 属于A同时属于B
SINTERCARD numkeys keyA keyB [LIMIT limit] // 不返回结果集只返回结果的基数
应用场景
抽象小程序 将所有抽奖用户 sadd key 用户ID显示多少人参加 SCARD key从set中任意选取N个中奖人 SRANDMEMBER key 2 随机抽奖两个人元素不删除SPOP key 2 随机抽奖两个人元素会删除朋友圈点赞 新增点赞 SADD pub:msgID 点赞用户Id1 点赞用户Id2取消点赞 SREM pub:msgID 点赞用户Id展现所有点赞过的用户 SMEMBERS pub:msgID点赞用户统计 SCARD pub:msgID判断某个朋友是否对楼主点赞过 SISMEMBER pub:msgID 用户Id可能认识的人 求两个人的差集 SDIFF user1 user2
5. Reids有序集合Zset
注意Zset和set的区别就是在set的基础上加了一个score分数值。
set k1 v1 v2 v3Zset k1 score1 v1 score2 v2
常用的
ZADD key score member [ score member ] // 添加元素
ZRANGE key start stop [WITHSCORES] // 返回元素分数从小到大的顺序 返回索引从start到stop之间的所有元素
ZREVRANGE key 0 - 1 [WITHSCORES] // 反序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] // 获取指定分数范围的元素 minmax 不包含 limit是返回限制返回多少个
ZSCORE key member // 获取元素的分数
ZCARD key // 获取集合中元素的数量
ZREM key 某score下对应的value值 // 删除元素
ZINCRBY key increment member // 增加某个元素的分数
ZCOUNT key min max // 获得指定分数范围内的元素个数
ZMPOP numkeys key [key …] MIN | MAX [COUNT count] // 从键名列表中的第一个非空排序集中弹出一个或多个亓素它们是成员分数对
ZRANK key values值 // 获得下标值
ZREVRANK key values // 逆序获得下标值
应用场景
根据商品销售对商品进行排序显示 思路定义商品销售排行榜(sorted set集合)key为goods:sellsort分数为商品销售数量。商品编号1001的销量是9商品编号1002的销量是15 zadd goods:sellsort 9 1001 15 1002有一个客户又买了2件商品1001商品编号1001销量加2 zincrby goods:sellsort 2 1001求商品销量前10名 ZRANGE goods:sellsort 0 9 withscores
6. Redis位图(bitmap)
由 0 和 1 表示的二进制位的 bit 数组
介绍
用String类型作为底层数据结构实现的一种统计二值状态的数据类型位图本质是数组它是基于String数据类型的按位的操作。该数组由多个二进制位组成每个二进制位都对应一个偏移量(我们称之为一个索引)Bitmap支持的最大位数是2^32位它可以极大的节约存储空间使用512M内存就可以存储多达42.9亿的字节信息(2的32次方 4294967296)
基本命令
SETBIT key offset value // 将第offset的值设为value value只能是0或1 offset 从0开始
GETBIT key offset // 获得第offset位的值
STRLEN key // 得出占多少字节 超过8位后自己按照8位一组一byte再扩容
BITCOUNT key // 得出该key里面含有几个1
BITOP and destKey key1 key2 // 对一个或多个 key 求逻辑并并将结果保存到 destkey
BITOP or destKey key1 key2 // 对一个或多个 key 求逻辑或并将结果保存到 destkey
BITOP XOR destKey key1 key2 // 对一个或多个 key 求逻辑异或并将结果保存到 destkey
BITOP NOT destKey key1 key2 // 对一个或多个 key 求逻辑非并将结果保存到 destkey 应用场景 做签到很适合位图 每天使用1个1亿位的Bitmap约占12MB的内存10^8/8/1024/102410天的Bitmap的内存开销约为120MB内存压力不算太高。在实际使用时最好对Bitmap设置过期时间让Redis自动删除不再需要的签到记录以节省内存开销。对于电影和广告是否被点击播放过也可以用位图
7. Redis基数统计(HyperLogLog)
介绍
去重复统计功能的基数估计算法就是 HyperLogLog基数 是一种数据集去重复后的真实个数基数统计 用于统计一个集合中不重复的元素个数就是对集合去重复后剩余元素的计算只需要花费12KB内存就能记录 2的64次方18446744073709551616 个不同元素的基数但是因为HyperLogLog只会根据输入元素来计算基数而不会储存输入元素本身所以HyperLogLog 不能像集合那样返回输入的各个元素。
基本命令
pfadd hllo1 1 3 5 7 9
pfadd hllo2 2 4 4 4 6 7 8
pfcount hllo2 //计算hllo2 中去重后元素个数
pfmerge distResult hllo1 hllo2 //合并hllo1 和 hllo2 中元素并去重
pfcount disResult //计算hllo2 中去重后元素个数
应用场景
统计某个网页的UV、某个文章的UV UV Unique Visitor 独立访客一般理解为客户端IP需要去重用户搜索网站关键词数量统计用户每天搜索不同词条个数
8. Redis地理空间(GEO)
介绍
地球上的地理位置是使用二维的经纬度表示经度范围 (-180, 180]纬度范围 (-90, 90]只要我们确定一个点的经纬度就可以名取得他在地球的位置。
例如滴滴打车最直观的操作就是实时记录更新各个车的位置然后当我们要找车时在数据库中查找距离我们(坐标x0,y0)附近r公里范围内部的车辆
经纬度去地图上直接复制拾取坐标系统 (baidu.com)
基本命令
GEOADD city 116.403963 39.915119 天安门 116.403414 39.924091 故宫 //GEOADD添加经纬度坐标
ZRANGE city 0 -1 // 查看会出现中文乱码
redis -cli -a 123456 - raw // 解决中文乱码
GEOPOS city 天安门 故宫 // GEOPOS 返回经纬度//GEOHASH返回坐标的 geohash 表示 base32编码
GEOHASH city 天安门 故宫//GEODIST 返回两个位置之间的距离(m km )
GEODIST city 天安门 长城 km//GEORADIUS 以给定的经纬度为中心 返回键包含的位置元素当中 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUS city 116.418017 39.9144444 10 km withdist withcoord count 10 desc//GEORADIUSBYMEMBER 找出指定范围内的元素中心点是由给定的位置元素决定
GEORADIUsbymember city 天安门 10 km withdist withcoord count 10 withhash 应用场景
美团附近的饭店、酒店高德地图附近的店
9. Redis流Stream
介绍
实现消息队列的三个方式 List实现消息队列Pub/Sub 发布订阅Stream流 Redis版的MQ消息中间件阻塞队列
Stream流实现消息队列它支持消息的持久化、支持自动生成全局唯一 ID、支持ack确认消息的模式、支持消费组模式等让消息队列更加的稳定和可靠
Stream结构 基本命令
队列指令 消费组指令 重点 复杂
10. Redis位域(bitfield)
介绍
将很多小的整数存储到一个长度较大的位图中又或者将一个非常庞大的键分割位多个较小的键来进行储存从而高效利用内存也就是将 Redis 字符串看作是一个 由二进制位组成的数组 并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
一句话将一个Redis字符串看作是一个由二进制位组成的数组并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改
基本命令 功能
位域修改溢出控制分享到此感谢大家观看
如果你喜欢这篇文章请点赞加关注吧或者如果你对文章有什么困惑可以私信我。