一站式学习Redis 从入门到高可用分布式实践 第二、三章

本文详细介绍Redis的各种数据结构及应用场景,包括字符串、哈希、列表、集合和有序集合等,探讨其在缓存、计数器、消息队列等方面的应用。

第二章 Redis API的使用和理解

2.1 Redis API的使用和理解

2.1.1 通用命令   

mset /mget      批量设置  减少了网络时间   一般而言=网络时间+命令时间

sadd myset a b c d e   将一个或多个成员元素加入到集合中

keys *      生产不适用,适用于热备从节点、scan

dbsize      计算key的总数

exists  key   检查key是否存在

expire key seconds  在seconds秒后key过期

ttl key  查看key剩余的过期时间

persist  key  去掉key的过期时间

type  key     返回key的类型

2.1.2 数据结构和内部编码

时间 <=> 空间

2.1.3 单线程架构

单线程为什么这么块?

       1.纯内存,响应速度快

        2.非阻塞IO

        3.避免现场切换和竟态消耗

注意事项:

       1.一次只执行一条命令

       2.拒绝长/慢命令

       3.其实不是单线程

 

2.2 字符串类型

使用场景:缓存、计数器、分布式锁...

命令:

 incr  key                 #自增1

decr key                  #自减1

incrby key k             #自增k   

decrby key k            #自减k

set key value           #不管key是否存在,都设置

setnx key value        #key不存在,才设置

set key value xx       #key存在,才设置

getset  key newvalue  #set key newvalue并返回旧的value

append key value       #将value追加到旧的value

strlen  key                   #返回字符串的长度

incrbyfloat key 3.5       #增加key对应的值3.5

getrange key start  end  #获取字符串指定下标的所有值

setrange key index value #设置指定下标所对应的值

实战:缓存视频

 

2.3 哈希类型

哈希键值结构

命令:

hdel key field1 [field2] :删除一个或多个字段

hexists key field :查看字段是否存在

hget key field :获取指定字段的值

hgetall key :获取所有字段和值

hincrby key field increment :字段的整数值加上增量 increment 。

hkeys key 获取所有哈希表中的字段

hlen key 获取哈希表中字段的数量

hmget key field1 [field2] 获取所有给定字段的值

hmset key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。

hset key field value 将哈希表 key 中的字段 field 的值设为 value 。

hsetnx key field value 只有在字段 field 不存在时,设置哈希表字段的值。

hvals key 获取哈希表中所有值

hscan key cursor [MATCH pattern] [COUNT count] :迭代哈希表中的键值对。

string VS hash:

 

 

 

2.4 列表类型

有序 可以重复

lpush和rpush  从左边/右边插入

lpop和rpop 从左边/右边弹出

lrem  key  count value  移除多少个value相等元素,count>0从左,count<0从右,count=0删除所有

ltrim  key  start   end  按照索引范围进行修减列表,只保留下标索引从start到end元素

linsert  listkey  before|after  pivot value  在元素pivot之前/之后插入value

lrange  key  start   end 获取指定范围内的元素

lindex key index 获取下标索引的元素

blpop key1 [key2 ] timeout 移出并获取列表首元素, 没有元素会阻塞列表直到超时或发现元素。

brpop key1 [key2 ] timeout 移出并获取列表尾元素, 没有元素会阻塞列表直到超时或发现元素。

lpush + lpop = Stack(栈)

lpush + rpop = Queue(队列)

lpush + ltrim = Capped Collection(有限制的列表)

lpush + brpop = Message Queue(消息队列)

实战:微博新消息-lpush

 

 

2.5 集合类型

无序 无重复  支持集合间操作

sadd  添加   srem  删除

scard key 获取集合的成员数

spop  移除并返回随机一个元素

srandmember  返回集合中一个或多个随机数

sismember key member 判断元素是否是集合 key 的成员

smembers  返回集合中的所有成员

sinter 取出两个集合相同的元素

sdiff   取出两个集合的差集

sunion 取出两个集合的并集

实战:随机抽奖-spop/srandmember ,添加标签-sadd,共同关注-sinter

 

 

2.6 有序集合类型

有序集合结构

命令:

zadd key score1 member1 添加/更新 一/多个成员

zcard key 获取成员数

zcount  key min max 计算区间内成员数

zincrby key increment member 对指定成员的分数加上增量 increment 

zincrby destination numkeys key [key ...] 计算一/多个有序集的交集并存储在新的有序集合 key 中

zrem key member [member ...] 移除有序集合中的一个或多个成员

zremrangebyrank  key start  end   删除指定排名内的升序元素

zremrangebyscore  key minScore maxScore  删除指定分数内的升序元素 

zrange key start stop 返回索引区间内的成员

zrank key member 返回有序集合中指定成员的索引

zrevrange key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到底

zscore key member 返回有序集中,成员的分数值

zunionstoredestination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中

zscan key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

zrangebylex key min max [LIMIT offset count] 返回value在区间内的成员,(为不包括,[为包括,-为小于

zrangebyscore key min max [WITHSCORES] [LIMIT]  返回score在区间内的成员,(1 5 表示1 < score <= 5

实战:排行榜

总结

 

 

转载于:https://my.oschina.net/u/3635618/blog/3075837

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值