Redis 基础数据类型
2023-02-05 21:06:19 19 举报
Redis 基础数据类型
作者其他创作
大纲/内容
keys: 全量遍历。用来列出所有满足特定正则字符串规则的key,当redis数据量比较大时, 性能比较差,要避免使用keys * / keys zhang* .......
bigkey大key一个key取到很多的元素
分布式系统全局序列号INCRBY orderID 1000 //redis批量生成序列号提高性能
优缺点
Zset集合操作ZUNIONSTORE destkey numkeys key [key ...] //并集计算ZINTERSTORE destkey numkeys key [key ...] // 交集计算
高阶指令
Set 运算操作SINTER key [key ...] //交集运算SINTERSTORE destination key [key ...] //将交集结果存入新集合destination中SUNION key [key ...] //并集运算SUNIONSTORE destination key [key ...] //将并集结果存入新集合destination中SDIFF key [key ...] font color=\"#388e3c\
异步删除
a:1
有序集合set
以用户id为key商品id为field商品数量为value
分布式锁
WEB集群session共享
d
2:balance
集合操作
Info : 查看Redis服务运行信息, 分为9大块,这9块分别是: Server 服务器运行的环境参数 Clients 客户端相关信息 Memory 服务器运行内存统计数据 Persistence 持久化信息 Stats 通用统计数据 Replication 主从复制相关信息 CPU CPU使用情况 Cluster 集群信息 KeySpace 键值对统计数量信息
Zset 集合实现排行榜
redis.conf# maxclients 10000
key
列表list
Stack(栈) = LPUSH + LPOPQUEUE(队列) = LPUSH + RPOPBlocking MQ(阻塞队列) = LPUSH + BRPOP
SADD brand:huawei P40SADD brand:xiaomi mi-10SADD brand:iPhone iphone12SADD os:android P40 mi-10SADD cpu:brand:intel P40 mi-10SADD ram:8G P40 mi-10 iphone12SINTER os:android cpu:brand:intel ram:8G {P40,mi-10}
field1
哈希hash
zset
1、点击参与抽奖加入集合SADD key {userID}2、查看所有抽奖用户SMEMBERS key3、抽取count 名中奖者SRANDMEMBER key [count] 或 SPOP key [count]
电商购物车
常用操作LPUSH key value [value ...] //将一个或多个值value插入key列表的表头(最左边)RPUSH key value [value ...] //将一个或多个值value插入key列表的表尾(最右边)LPOP key //移除并返回key列表的头元素RPOP key //移除并返回key列表的尾元素LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定BLPOP key [key ...] timeout font color=\"#388e3c\
String 应用场景
RPUSH
Hash 应用场景
c
集合操作实现微博微信关注模型
微信微博点赞、收藏、标签
set
对象缓存
b
doug
1、添加商品 -> hset cart:1001 10088 12、添加数量 -> hincrby cart:1001 10088 13、商品总数 -> hlen cart:10014、删除商品 -> hdel cart:1001 100885、获取购物车所有商品 -> hgetall cart:1001
hash
原子加减INCR key //将key中存储的数字值加1DECR key //将key中存储的数字值减1INCRBY key increment //将key所存储的值加上incrementDECRBY key decrement //将key所存储的值减去 decrement
a
常用操作ZADD key score memeber [[score memeber] ...] //往有序集合key中加入带分值元素ZREM key member [member ...] //从有序集合key中删除元素ZSCORE key member //返回有序集合key中元素member的分值ZINCRYBY key increment member //为有序集合key中元素member的分值加上incrementZCARD key //返回有序集合key中元素个数ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素
查看redis最大支持连接数
RPOP
set2
field2
常用操作HSET key filed value //存储一个哈希表key 的键值HSETNX key field value //存储一个不存在的哈希表 key的键值HMSET key field value [field value ...] //在一个key中存储多个键值对HGET key field //获取哈希表key对应的field键的值HMGET key field [field ...] //批量获取哈希表key中多个field键的值HDEL key field [field ...] //删除哈希表key中field键值HLEN key //返回哈希表key中field的数量HGETALL key //返回哈希表key中所有的键值
b:2
常用数据结构
优点1、同类数据归类整合存储,方便数据管理2、相比string操作消耗内存与CPU更小3、相比string存储更节省空间
LPUSH
计数器
SET key valueGET key
操作
LPOP
..........
诸葛老师关注了MacTalk,备胎说车等大V1)MacTalk发微博,消息ID为10018LPUSH msg:{诸葛老师-ID} 100182)备胎说车发微博,消息ID为10086LPUSH msg:{诸葛老师-ID} 100863)查看最新微博消息LRANGE msg:{诸葛老师-ID} 0 4
常用操作SADD key member [member ...] //往集合key中存入元素,元素存在则忽略,若key不存在则新建SREM key member [member ...] //从集合key中删除元素SMEMBERS key //获取集合key中所有元素SCARD key //获取集合key的元素个数SISMEMBER key member //判断member元素是否存在于集合key中SRANDMEMBER key [count] //从集合key中选出count个元素,元素不从key中删除SPOP key [count] //从集合key中选出count个元素,元素从key中删除
string
字符串string
持久化
1:balance
set3
spring session + redis 实现session共享
scan: 渐进式遍历键SCAN cursor [MATCH pattern] [COUNT count]scan 参数提供了三个参数,第一个是 cursor 整数值(hash桶的索引值),第二个是 key 的正则模式, 第三个是一次遍历的key的数量(参考值,底层遍历的数量不一定),并不是符合条件的结果数量。第 一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历 到返回的 cursor 值为 0 时结束。注意:但是scan并非完美无瑕, 如果在scan的过程中如果有键的变化(增加、 删除、 修改) ,那 么遍历效果可能会碰到如下问题: 新增的键可能没有遍历到, 遍历出了重复的键等情况, 也就是说 scan并不能保证完整的遍历出来所有的键, 这些是我们在开发时需要考虑的。scan 0 match key99* count 100scan 122 match key99* count 100
IO多路复用,epoll实现将连接信息和事件放到队列中,依次放到 文件事件分派器,事件分派器将事件分发给事件处理器
SET user:1 value(json)MSET user:1:name doug user:1:balance 2002MGET user:1:name user:1:balance
微信抽奖小程序
应用场景
单线程
缺点1、过期功能不能使用在field上,只能用在key上2、Redis集群架构下不适合大规模使用
1)点击新闻ZINCRBY hotNews:20190819 1 守护香港2)展示当日排行前十ZREVRANGE hotNews:20190819 0 9 WITHSCORES 3)七日搜索榜单计算ZUNIONSTORE hotNews:20190813-20190819 7 hotNews:20190813 hotNews:20190814... hotNews:201908194)展示七日排行前十ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES
bitmap非0即1 大量统计
集群数据同步
Redis
SETNX product:10001 true //返回1代表获取锁成功SETNX product:10001 true // 返回0代表获取锁失败.....执行业务操作DEL product:10001 //释放锁SET product:10001 true ex 10 nx //防止意外终止死锁
e
user
正数索引: 0 1 2 3负数索引: -4 -3 -2 -1
I am a string
cli 命令
微博和微信公众号信息流
list
原子操作HINCRBY key field increment //为哈希表key中field键的值加上增量increment
value1
CONFIG GET maxclients##1) \"maxclients\" ##2) \"10000\"
1:name
1、张三关注的人 span style=\"font-size: inherit;\
单值缓存
HMSET user {userId}:name doug {userId}:balance 2002HMSET user 1:name doug 1:balance 2002HGET user 1:name 1:balance
多线程
value2
INCR article:readcount:{文章ID}GET article:readcount:{文章ID}
2002
Redis 的网络 IO 和键值对读写是由一个线程来完成的
2:name
集合set
集合操作实现电商商品筛选
cheung
c:3
常用操作SET key value //存入字符串键值对MSET key value [key value ...] //批量存储字符串键值对SETNX key value //存入一个不存在的字符串键值对GET key //获取一个字符串键值MGET key [key ...] //批量获取字符串键值DEL key [key ...] //删除一个键EXPIRE key seconds //设置一个键的过期时间(秒)
set1
1、点赞SADD like:{消息ID} {用户ID}2、取消点赞SREM like:{消息ID} {用户ID}3、检查用户是否点过赞SISMEMBER like:{消息ID} {用户ID}4、获取点赞的用户列表SMEMBERS like:{消息ID}5、获取点赞用户数SCARD like:{消息ID}
1999
0 条评论
下一页