随笔 - 149,  文章 - 0,  评论 - 0,  阅读 - 12581

【redis使用场景】

复制代码
 1 #1  缓存系统:使用最广泛的就是缓存
 2 
 3 #2  计数器:网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题)
 4     django--->并发操作数据库---》数据没有错乱--》mysql是一个服务---》支持并发访问的--》处理了并发安全的问题---》不需要我们从程序端考虑并发安全问题
 5     redis--》没有锁--》不存在并发安全问题--》redis数据读写是单线程的
 6 
 7 #3 消息队列:发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者)
 8     IPC 进程间通信
 9     具体到项目:遇到问题发通知
10         -1w个问题,都要发通知
11         -只要产生问题---》就把问题丢到消息队列中---》另一端起程序,发送消息
12         
13 #4 排行榜:有序集合(阅读排行,点赞排行,推荐(销量高的,推荐))
14 
15 #5 社交网络:很多特效跟社交网络匹配,粉丝数,关注数
16 
17 #6  实时系统:垃圾邮件处理系统,布隆过滤器
复制代码

【通用命令】

复制代码
redis-cli允许用户与redis进行交互
1
#1-keys 2 #打印出所有key 3 keys * 4 #打印出所有以he开头的key 5 keys he* 6 #打印出所有以he开头,第三个字母是h到l的范围 7 keys he[h-l] 8 #三位长度,以he开头,?表示任意一位 9 keys he? 10 #keys命令一般不在生产环境中使用,生产环境key很多,时间复杂度为o(n),用scan命令 11 12 13 #2-dbsize 计算key的总数 14 dbsize #redis内置了计数器,插入删除值该计数器会更改,所以可以在生产环境使用,时间复杂度是o(1) 15 16 17 #3-exists key 时间复杂度o(1) 18 #设置a 19 set a b 20 #查看a是否存在 21 exists a 22 (integer) 1 23 #存在返回1 不存在返回0 24 25 26 #4-del key 时间复杂度o(1) 27 删除成功返回1,key不存在返回0 28 29 30 #5-expire key seconds 时间复杂度o(1) 31 expire name 3 #3s 过期 32 ttl name #查看name还有多长时间过期 33 persist name #去掉name的过期时间 34 35 36 #6-type key 时间复杂度o(1) 37 type name #查看name类型,返回string 38 39 40 41 # 7 其他 42 info命令:内存,cpu,主从相关-->通过它来写redis服务监控 43 client list 正在连接的会话 44 client kill ip:端口 45 flushall 清空所有 46 flushdb 只清空当前库 47 select 数字 选择某个库 总共16个库 48 monitor 记录操作日志,夯住 49 50 ------------------------------------------------------------------------------------- 51 52 # 管理redis实例的web项目 53 https://gitee.com/bijingrui/repoll 54 https://gitee.com/dromara/mayfly-go 55 https://gitee.com/careyjike_173/redis_web_client 56 57 https://gitee.com/Alcex/QMySQLAdmin 58 https://gitee.com/CloudWise/OMP 59 https://gitee.com/lustlost/ubackup
复制代码

【字符串类型】

复制代码
 1 #1---基本使用get,set,del
 2 get name       #时间复杂度 o(1)
 3 set name lqz   #时间复杂度 o(1)
 4 del name       #时间复杂度 o(1)
 5 
 6 
 7 #2---其他使用incr,decr,incrby,decrby
 8 incr age  #对age这个key的value值自增1
 9 decr age  #对age这个key的value值自减1
10 incrby age 10  #对age这个key的value值增加10
11 decrby age 10  #对age这个key的value值减10
12 #统计网站访问量(单线程无竞争,天然适合做计数器)
13 #分布式id生成(多个机器同时并发着生成,不会重复)
14 
15 
16 
17 #3---set,setnx,setxx
18 set name lqz  #不管key是否存在,都设置 
19 setnx name lqz #key不存在时才设置(新增操作)
20 set name lqz nx #同上
21 set name lqz xx #key存在,才设置(更新操作)
22 
23 
24 #4---mget mset
25 mget key1 key2 key3     #批量获取key1,key2.。。时间复杂度o(n)
26 mset key1 value1 key2 value2 key3 value3    #批量设置时间复杂度o(n)
27 #n次get和mget的区别
28 #n次get时间=n次命令时间+n次网络时间
29 #mget时间=1次网络时间+n次命令时间
30 
31 #5---其他:getset,append,strlen
32 getset name lqznb #设置新值并返回旧值 时间复杂度o(1)
33 append name 666 #将value追加到旧的value 时间复杂度o(1)
34 strlen name  #计算字符串长度(注意中文)  时间复杂度o(1)
35 
36 #6---其他:incrybyfloat,getrange,setrange
37 increbyfloat age 3.5  #为age自增3.5,传负值表示自减 时间复杂度o(1)
38 getrange key start end #获取字符串制定下标所有的值  时间复杂度o(1)
39 setrange key index value #从指定index开始设置value值  时间复杂度o(1)
复制代码

【hash类型】

复制代码
 1 #1---hget,hset,hdel
 2     hget key field  #获取hash key对应的field的value 时间复杂度为 o(1)
 3     hset key field value #设置hash key对应的field的value值 时间复杂度为 o(1)
 4     hdel key field #删除hash key对应的field的值 时间复杂度为 o(1)
 5 
 6 #测试
 7 hset user:1:info age 23
 8 hget user:1:info age
 9 hset user:1:info name lqz
10 hgetall user:1:info
11 hdel user:1:info age
12 
13 #2---hexists,hlen
14     hexists key field  #判断hash key 是否存在field 时间复杂度为 o(1)
15     hlen key   #获取hash key field的数量  时间复杂度为 o(1)
16     hexists user:1:info name
17     hlen user:1:info  #返回数量
18       
19 #3---hmget,hmset
20     hmget key field1 field2 ...fieldN  #批量获取hash key 的一批field对应的值  时间复杂度是o(n)
21     hmset key field1 value1 field2 value2  #批量设置hash key的一批field value 时间复杂度是o(n)
22 
23 #4--hgetall,hvals,hkeys
24     hgetall key  #返回hash key 对应的所有field和value  时间复杂度是o(n)
25     hvals key   #返回hash key 对应的所有field的value  时间复杂度是o(n)
26     hkeys key   #返回hash key对应的所有field  时间复杂度是o(n)
27 ###小心使用hgetall
28 ##1 计算网站每个用户主页的访问量
29 hincrby user:1:info pageview count
30 ##2 缓存mysql的信息,直接设置hash格式
31 
32 #其他操作 hsetnx,hincrby,hincrbyfloat
33     hsetnx key field value #设置hash key对应field的value(如果field已存在,则失败),时间复杂度o(1)
34     hincrby key field intCounter #hash key 对英的field的value自增intCounter 时间复杂度o(1)
35     hincrbyfloat key field floatCounter #hincrby 浮点数 时间复杂度o(1)
复制代码

【列表类型】

复制代码
 1 ###插入操作###
 2 #rpush 从右侧插入
 3 rpush key value1 value2 ...valueN  #时间复杂度为o(1~n)
 4 #lpush 从左侧插入
 5 #linsert
 6 linsert key before|after value newValue   #从元素value的前或后插入newValue 时间复杂度o(n) ,需要遍历列表
 7 linsert listkey before b java
 8 linsert listkey after b php
 9 
10 
11 ######删除操作#########
12 lpop key #从列表左侧弹出一个item 时间复杂度o(1)
13 
14 rpop key #从列表右侧弹出一个item 时间复杂度o(1)
15 
16 lrem key count value
17 #根据count值,从列表中删除所有value相同的项 时间复杂度o(n)
18 1 count>0 从左到右,删除最多count个value相等的项
19 2 count<0 从右向左,删除最多 Math.abs(count)个value相等的项
20 3 count=0 删除所有value相等的项
21 lrem listkey 0 a #删除列表中所有值a
22 lrem listkey -1 c #从右侧删除1个c
23 
24 ltrim key start end #按照索引范围修剪列表 o(n)
25 ltrim listkey 1 4 #只保留下表1--4的元素
26 
27 
28 ############查询操作############
29 lrange key start end #包含end获取列表指定索引范围所有item  o(n)
30 lrange listkey 0 2
31 lrange listkey 1 -1 #获取第一个位置到倒数第一个位置的元素
32 
33 lindex key index #获取列表指定索引的item  o(n)
34 lindex listkey 0
35 lindex listkey -1
36 
37 llen key #获取列表长度
38 ############修改操作############
39 lset key index newValue #设置列表指定索引值为newValue o(n)
40 lset listkey 2 ppp #把第二个位置设为ppp
41 
42 ############实战############
43 实现timeLine功能,时间轴:微博关注的人,按时间轴排列,在列表中放入关注人的微博的即可
44 
45 ############其他操作############
46 blpop key timeout #lpop的阻塞版,timeout是阻塞超时时间,timeout=0为拥有不阻塞 o(1)
47 brpop key timeout #rpop的阻塞版,timeout是阻塞超时时间,timeout=0为拥有不阻塞 o(1)
48 
49 #要实现栈的功能
50 lpush+lpop
51 #实现队列功能
52 lpush+rpop
53 #固定大小的列表
54 lpush+ltrim
55 #消息队列
56 lpush+brpop
复制代码

【集合操作】

复制代码
 1 sadd key element #向集合key添加element(如果element存在,添加失败) o(1)
 2 
 3 srem key element #从集合中的element移除掉 o(1)
 4 
 5 scard key #计算集合大小
 6 
 7 sismember key element #判断element是否在集合中
 8 
 9 srandmember key count #从集合中随机取出count个元素,不会破坏集合中的元素
10 
11 spop key #从集合中随机弹出一个元素
12 
13 smembers key #获取集合中所有元素 ,无序,小心使用,会阻塞住 
14 
15 #####  集合操作######
16 sdiff user:1:follow user:2:follow  #计算user:1:follow和user:2:follow的差集
17 
18 sinter user:1:follow user:2:follow  #计算user:1:follow和user:2:follow的交集
19           
20 sunion user:1:follow user:2:follow  #计算user:1:follow和user:2:follow的并集
21                 
22 sdiff|sinter|suion + store destkey... #将差集,交集,并集结果保存在destkey集合中
23 sdiffstore  另一个集合名字  boys  girls
24 sinterstore  另一个集合名字  boys  girls
25 
26 
27 
28 ---------------- 集合可以做什么--------------------------
29 
30 1 抽奖系统 :通过spop来弹出用户的id,活动取消,直接删除
31 
32 2 点赞,点踩,喜欢等,用户如果点了赞,就把用户id放到该条记录的集合中
33 
34 3 标签:给用户/文章等添加标签,sadd user:1:tags 标签1 标签2 标签3
35     给标签添加用户,关注该标签的人有哪些
36 
37 4 共同好友:集合间的操作
38 
39 =========总结================
40 sadd:可以做标签相关
41 
42 spop/srandmember:可以做随机数相关
43 
44 sadd/sinter:社交相关
复制代码

 。

 

【有序集合】

复制代码
 1 # 特点:
 2 #有一个分值字段,来保证顺序
 3 key                  score                value
 4 user:ranking           1                   lqz
 5 user:ranking           99                  lqz2
 6 user:ranking           88                  lqz3
 7 
 8 #集合有序集合
 9 集合:无重复元素,无序,element
10 有序集合:无重复元素,有序,element+score
11 
12 #列表和有序集合
13 列表:可以重复,有序,element
14 有序集合:无重复元素,有序,element+score
15 
16 
17 # API使用
18 zadd key score element #score可以重复,可以多个同时添加,element不能重复 o(logN) 
19 
20 zrem key element #删除元素,可以多个同时删除 o(1)
21 
22 zscore key element #获取元素的分数 o(1)
23 
24 zincrby key increScore element #增加或减少元素的分数  o(1)
25 
26 zcard key #返回元素总个数 o(1)
27 
28 zrank key element #返回element元素的排名(从小到大排)
29 
30 zrange key 0 -1 #返回排名,不带分数  o(log(n)+m) n是元素个数,m是要获取的值
31 
32 zrange player:rank 0 -1 withscores #返回排名,带分数
33 
34 zrangebyscore key minScore maxScore #返回指定分数范围内的升序元素 o(log(n)+m) n是元素个数,m是要获取的值
35 
36 zrangebyscore user:1:ranking 90 210 withscores #获取90分到210分的元素
37 
38 zcount key minScore maxScore #返回有序集合内在指定分数范围内的个数 o(log(n)+m)
39 
40 zremrangebyrank key start end #删除指定排名内的升序元素 o(log(n)+m)
41 
42 zremrangebyrank user:1:rangking 1 2 #删除升序排名中1到2的元素   
43 
44 zremrangebyscore key minScore maxScore #删除指定分数内的升序元素 o(log(n)+m)
45 
46 zremrangebyscore user:1:ranking 90 210 #删除分数90到210之间的元素
47 
48 #应用场景
49 排行榜:音乐排行榜,销售榜,关注榜,游戏排行榜
50 
51 ----------------------------------------------------
52 # 其他操作
53 zrevrank #从高到低排序
54 zrevrange #从高到低排序取一定范围
55 zrevrangebyscore #返回指定分数范围内的降序元素
56 zinterstore #对两个有序集合交集
57 zunionstore #对两个有序集合求并集
复制代码

 

posted on   认真的六六  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示