redis-第二节

set 类型
新的存储需求:存储大量的数据,在查询方面提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

添加数据
sadd key member1 [member2]
实例
sadd users za
sadd users ww
获取全部数据
smembers key
实例
smembers users
删除数据
srem key member1 [member2]
实例
srem users ww

获取集合数据总量
scard key
实例
scard users
判断集合中是否包含指定数据
sismember key member
sismember users  za  #存在返回个数 不存在返回0

随机获取集合中指定数量的数据
srandmember key [count]
srandmember users 3
随机获取集合中的某个数据并将该数据移出集合
spop key[count]
spop users 2

求两个集合的交、并、差集
sinter key1 [key2]

sadd u1 b1
sadd u2 b2
sadd u2 b3
sinter u1 u2

sunion key1 [key2]

sdiff key1 [key2]


求两个集合的交、并、差集并存储到指定集合中
sinterstore destination key1 [key2]
sinterstore u3 u1 u2 #u3是u1 u2计算出来的 的交集
sunionstore destination key1 [key2]  #并
sdiffstore destination key1 [key2] #差

将指定数据从原始集合中移动到目标集合中
smove source destination member
smove u2 u1 b3  将b3从u2移动 到u1


sorted_set 类型
新的存储需求:数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式
需要的存储结构:新的存储模型,可以保存可排序的数据
sorted_set类型:在set的存储结构基础上添加可排序字段

添加数据
zadd key score1 member1 [score2 member2]
实例
zadd scores 94 zhangshan
zadd scores 100 lisi
zadd scores 47 wangwu
zadd scores 60 pipi
zadd scores 75 xingixng
获取全部数据
zrange key start stop [WITHSCORES]  #由低到高返回
实例
zrange scores 0 -1  #返回最后一个人名
zrange scores 0 -1 withscores  #全部值一起返回

zrevrange key start stop [WITHSCORES]  #由高到低返回
实例
zrevrange scores 0 -1
zrevrange scores 0 -1 withscores
删除数据
zrem key member [member ...]
实例:
zrem scores lisi

按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrangebyscore scores 50 80 withscores #查询50到80分的数据
zrangebyscore scores 50 99 limit 0 2 withscores #查询50到99分的前2个数据
zrevrangebyscore key max min [WITHSCORES]
 zrevrangebyscore scores 50 99 withscores

条件删除数据
zremrangebyrank key start stop
zremrangebyrank scores 0 1 #删除0 到1条数据
zremrangebyscore scores 50 70  #删除50 到70分的数据

注意:
min与max用于限定搜索查询的条件
start与stop用于限定查询范围,作用于索引,表示开始和结束索引
offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量

获取集合数据总量
zcard key
实例
zcard scores

zcount key min max
实例
zcard scores 50 99
集合交、并操作
zinterstore destination numkeys key [key ...]
zadd s1 50 aa 60 bb 70 cc
zadd s2 50 dd 56 ee 40 ff
zadd s3 99 hh 50 ii 80 jj
zinterstore ss 3 s1 s2 s3
zrange ss 0 -1 withscores

zunionstore destination numkeys key [key ...]

获取数据对应的索引(排名)
zrank key member
zadd movies 143 aa 97 bb 201 cc
zrank movies bb  由小到大排名

zrevrank key member
zrevrank movies bb 由大到小排名

score值获取与修改
zscore key member
zscore movies aa #返回排名数值
zincrby key increment member
zincrby movies 3 aa  #返回追加后的排名数值排名 这里是追加3

获取当前系统时间
time

人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,
百度自研用户评价语义识别服务,免费开放给企业试用,同时训练百度自己的模型。
现对试用用户的使用行为进行限速,限制每个用户每分钟最多发起10次调用

解决方案
设计计数器,记录调用次数,用于控制业务执行次数。以用户id作为key,使用次数作为value
在调用前获取次数,判断是否超过限定次数 不超过次数的情况下,每次调用计数+1 业务调用失败,计数-1
为计数器设置生命周期为指定周期,例如1秒/分钟,自动清空周期内使用次数

get 415
setex 415 60 1
get 415
incr 415
get 415
incr 415
incrby 415 7
get 415
get 415


使用微信的过程中,当微信接收消息后,会默认将最近接收的消息置顶,当多个好友及关注的订阅号同时发送消息时,该排序会不停的进行交替。
同时还可以将重要的会话设置为置顶。一旦用户离线后,再次打开微信时,消息该按照什么样的顺序显示?

解决方案 Tips 17: redis 应用于基于时间顺序的数据操作,而不关注具体时间
依赖list的数据具有顺序的特征对消息进行管理,将list结构作为栈使用
对置顶与普通会话分别创建独立的list分别管理
当某个list中接收到用户消息后,将消息发送方的id从list的一侧加入list(此处设定左侧)
多个相同id发出的消息反复入栈会出现问题,在入栈之前无论是否具有当前id对应的消息,先删除对应id
推送消息时先推送置顶会话list,再推送普通会话list,推送完成的list清除所有数据
消息的数量,也就是微信用户对话数量采用计数器的思想另行记录,伴随list操作同步更新
# 从100中把200删除 次
# 把200放进100
lrem 100 1 200
lpush 100 200
lrem 100 1 300
lpush 100 300
lrem 100 1 400
lpush 100 400
lrem 100 1 200
lpush 100 200
lrem 100 1 300
lpush 100 300
lrange 100 0 -1


key 基本操作

删除指定key
del key
实例
set str str
hset hash1 hash1 hash1
lpush list1 list1
sadd set1 set1
zadd zset1 1 zsete1
del zset1
获取key是否存在
exists  key
exists str
获取key的类型
type key
type hash1

为指定key设置有效期

expire key seconds
expire str 3  设置有效期为3秒
pexpire key milliseconds(毫米)
expireat key timestamp  #(用时间戳设置)
pexpireat key millisecond s-timestamp

获取key的有效时间
ttl key
tt1 list1 #获取已设置的有效时间
pttl key
切换key从时效性转换为永久性
persist key

查询key
keys pattern
keys *  这里为查调所有的KEY

查询模式规则
* 匹配任意数量的任意符号 ? 配合一个任意符号 [] 匹配一个指定符号
keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??heima 查询所有前面两个字符任意,后面以heima结尾
keys user:? 查询所有以user:开头,最后一个字符任意
keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t

key 其他操作
为key改名
rename key newkey

renamenx key newkey
renamenx str1 str3    #str1 改名为str3
对所有key排序
sort key
其他key通用操作
help @generic

db 基本操作
切换数据库
select index
select 0
其他操作
quit
ping
echo message
数据移动
move key db
move name 2  #2为库名称
数据清除
dbsize
flushdb
flushall
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值