Redis
一:Redis常用数据结构
1:String - 字符串
1.1 数据结构
Key-Value
1.2 常用命令
字符串常用操作
1:SET KEY VALUE // 存入字符串键值对 eg: SET name zhansan
2:GET KEY // 获取一个字符串键值 eg: GET name
3::MSET KEY VALUE [KEY VALUE] //批量存储字符串键值 eg: MSET user:2:name zhansan user:2:age 20
4: MGET KEY [KEY] //批量获取字符串键值 eg: Mget user:1:name user:1:age
5:SETNX KEY VALUE //存入一个不存在的字符串键值
6:DEL KEY [KEY] //删除一个健 eg: del name
7:EXPIRE KEY SECONDS //设置一个健的过期时间 eg: expire name 3
原子加减
1:INCR KEY //将KEY中储存的数字值加1 eg: incr age 1
2:DECR KEY //将KEY中储存的数字值减1 eg: decr age 1
3:INCRBY KEY INCREMENT //将KEY中储存的数字值加 eg: incrby ment 100
4:DECRTY KEY INCREMENT //将KEY 中储存的数字值减 eg: decrby ment 50
2:Hash - 哈希
2.1 数据结构
Key filed1 value1 [ field value2]
2.2 常用命令
1:HSET KEY FIELD VALUE //存储一个hash表的key的键值 eg:hset product apple 10
2: HGET KEY FIELD //获取一个hash表key对应的field值 eg:hget product apple
3:HMSET KEY FIELD VALUE [FIELD VALUE ] //批量存储多个key的键值 eg: hmset product xihongshi 20 xigua 330
4::HMGET KEY FIELD [FIELD] //批量存储多个key的键值 eg: hmget product xihongshi xigua
5: HSETNX KEY FIELD VALUE // 存储一个不存在的哈希表KEY 的键值 eg: hsetnx order zhansan 10
6:HDEL KEY FIELD [FIELD] // 删除hash表对应key的field键值 eg: hdel order zhansan
7:HLEN KEY // 返回hash 表key中的field 的数量 eg: hlen product
8:HGETALL KEY // 返回hash表中所有的键值 eg:hgetall product
9:HINCRBY KEY FIELD INCREMENT //为hash表key中的field键的值加上增量increment eg:hincrby product xihongshi 30
3:List - 列表
3.1 数据结构
Key-Value [value value]
3.2 常用命令
1:LPUSH KEY VALUE [VALUE...] // 将一个或多个值插入到key列表的左边 eg:lpush age 10
2:LPOP KEY //移除并返回key列表最左边的元素 eg: lpop age
3: RPUSH KEY VALUE [VALUE...] // 将一个或多个值插入到key列表的右边 eg:rpush age 23
4: RPOP KEY // 移除并返回key列表最右边的元素 eg:rpop age
5: LRANGE KEY STAT STOP // 返回列表中指定区间的元素 eg:lrage age 0 10
6: BLPOP KEY [KEY] TIMEOUT // 从key列表左边弹出一个元素,若该列表中没有元素,阻塞等待timeout秒,若timeour等于0,则一直阻塞等待 eg: blpop agee 0
7: BRPOP KEY [KEY] TIMEOUT //从key列表中右边弹出一个元素,若该列表中没有元素,阻塞等待timeou秒,若timeour等于0,则一直阻塞等待 brpop agee 0
4:Set - 集合
4.1 数据结构
Key-member [member...]
4.2 常用命令
set常用操作
1:SADD KEY MEMBER [MEMBER] // 往集合key中存入元素,若元素存在则忽略,若key不存在则新建 eg: sadd people zhansan lisi sadd city shanghai shenzheng chendu sadd addr gansu guangdong zhaoqing
2:SREN KEY MEMBER [MEMBER] //从集合key中删除元素 eg: srem people zhansan
3:SMEMBERS KEY // 获取集合中的所有元素 eg: smembers people
4:SCARD KEY // 获取集合key中元素的个数 eg: scard people
5:SISMEMBER KEY MEMBER // 判断members元素是否存在于集合key中 eg: sismember people wangwu 返回1表示存在、返回0表示不存在
6:SRANDMEMBER KEY [COUNT] // 从集合key中选出count个元素、元素不从key中删除 eg: srandmember people 1
7:SPOP KEY [COUNT] // 从集合key中选出count个元素,元素从key中删除 spop people 1
set 运算操作
1:SINTER KEY [KEY...] //交集运算 eg:sinter people city
2:SINTERSTOR DESTINATION KEY [KEY] // 将交集结果存入新集合destination中 eg: sinterstore age people city
3:SUNION KEY [KEY] // 并集运算 eg: sunion people city
4: SUNIONSTORE DESTINATION KEY [KEY ] //将并集结果存入新集合destination中 eg: sunion name people city
5:SDIFF KEY [KEY] // 差集运算 eg: sdiff people city
6:SDIFFSTORE DESTINATION KEY [KEY] //将差集结果存入新集合destination中 eg:sdiffstore fangzi people city
5:Zset(sorter set)- 有序集合
5.1 数据结构
Key-Valu
5.2 常用命令
1:ZADD key score1 member1 [score2 member2] //向有序集合添加一个或多个成员,或者更新已存在成员的分数 eg: zadd hotnewwanggang 1 "守护香港" 2 " 智慧养老" 7 "天下无敌" 4 “陆嘉怡”
2:ZCARD key //获取有序集合的成员数
3:ZINCRBY key increment member //有序集合中对指定成员的分数加上增量 increment eg:zincrby hotnew:0823 1 守护香港
4:ZREVRANGE key start stop [WITHSCORES] //返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 eg: zrevrange hotnewwanggang 0 2
5:ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中
二:Redis数据机构使用场景
1:字符串使用场景
1.1 :单值存储
set name zhangsan
set user:3 (name:zhansan age:20)----
get name
1.2:对象存储
mset user:1:name zhansan user:1:age 20 user:1:pwd 40
mget user:1:name user:1:age user:1:pwd
mset name zhang age 20 pwd 123
mget name age pwd
1.3:分布式锁
setnx product:10001:name apple 返回1 代表获取锁成功、返回0 代表获取锁失败
--- 执行业务操作---
del prodcut:1003
set pruduct:1001 true ex 10 nx
1.4:计数器
incr article:readcount:1001 统计文章阅读数
get article:readcount:1001 获取文章阅读数
1.5:web集群session共享
web session+redis 实现集群共享 实现web集群下session共享问题
1.6:分布式系统全局序列号
incrby id 10 批量生成序列号用以提升性能
2:字符串使用场景
2.1 :电商购物车
以用户id为key
商品id为field
商品数量为value
购物车相关操作
1:添加商品 hset wanggang juzi 10
2: 增加数量 hincrby wanggang juzi 1
3: 商品总数 hlen wanggang
4: 删除商品 hdel wanggang juzi
5: 获取购物车所有商品 hgetall wanggang
3:List使用场景
3.1 :常用数据结构
Stack(栈) = LPUSH + LPOP --FILO 先进后出
Queue(队列) = LPUSH _RPIP --FIFO 先进先出
Blocking MQ(阻塞队列) = LPUSH+ BRPOP
3.2: 微博消息和公众号消息
zhangsan 关注了 lisi、wangwu等
1:lisi 发微博
lpush msg:zhansan 1001 --1001为消息id
2: wangwu发微博
lpush msg:zhansan 1002
3:查看最新微博消息
lrange msg:zhangsan 0 5
4:Set使用场景
4.1 :微博微信关注模型
1:zhangsan关注的人
zhangsanSet --> sadd zhansan a b c
2:lisi关注的人
lisiSet --> sadd lisi b c d
3:wangwu关注的人
wangwuSet--> sadd wangwu c d e
4:zhansan和lisi共同关注的人
sinter zhangsan lisi
5:zhangsan关注的人也关注zhaoliu
sismember lisi zhaoliu
sismember wangwu zhaoliu
6:zhansan可能认识的人
sdiff lisi wangwu
4.2: 微信抽奖小程序
1:点击参与抽奖加入集合
sadd choujiang zhansan
2:查看参与抽奖的用户
smember choujiang
3:抽取count名中奖者
srandmember choujiang count /spop choujiang count
4.3: 微信微博点赞、收藏、标签
1:点赞
sadd like:消息id zhansan 用户id
2:取消点赞
srem like zhansan
3:检查用户是否点过赞
sismember like zhansan
4:获取点赞的用户列表
smember like
5:获取点赞用户数
scard like
4.4: 实现电商商品筛选
5:Zset使用场景
5.1 :实现排行榜
1:点击新闻
incrby hotnew:0823 1 守护香港
2:展示当日排行榜前10
zrevrange hotnewwanggang 0 10
3:七日搜索榜单计算
zunionstore hotnews0809 7 hounews0807 hotnews0803
4:展示七日排行榜前10
zrevrange hotnews0809 0 10