Redis-入门

Redis的10大数据类型

这里的数据类型说的是 value的数据类型

1.字符串String

string是redis最基本的类型一个key对应一个value。

string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象

string类型是Redis最基本的数据类,一个redis中字符串value最多可以是512M

2.列表List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

它的底层实际是个双端链表,最多可以包含 2^32-1 个元素(4294967295,每个列表超过40亿个元素)

3.哈希表Hash

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。

Redis 中每个 hash 可以存储 2^32-1 键值对(40多亿)

4.集合Set

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者hashtable.

Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 (1)。

集合中最大的成员数为2^32-1(4294967295,每个集合可存储40多亿个成员)

5.有序集合ZSet

zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员

不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序

zset的成员是唯一的,但分数(score)却可以重复。

zset集合是通过哈希表实现的,所以添加,删除,査找的复杂度都是 o(1)。 集合中最大的成员数为 2^32-1

6.地理空间GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括

        添加地理位置的坐标。

        获取地理位置的坐标。

        计算两个位置之间的距离。

        根据用户给定的经纬度坐标来获取指定范围内的地理位置集合

7.基数统计HyperLogLog

HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

8.位图BitMap

9.位域BitField

通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。

说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。

10.流Stream

常见数据类型操作命令获取:

Commands | Docs

http://www.redis.cn/commands.htm

Redis Key:(Redis  key的常见命令)

1.keys *

查看当前库的所有key

2.exists key

判断某个key是否存在(1:true,0:false)

3.type key

查看key是社么数据类型

4.del key

删除指定的key数据

5.unlink key

非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。

6.ttl key

查看还有多少秒过期,-1表示永不过期,-2表示已过期

7.expire  key 秒钟

为给定的key设置过期时间

8.move key dbindex【0-15】

将当前数据库的key移动到给定的数据库db当中

9.select dbindex

切换数据库【0-15】,默认为0

10.dbsize

查看当前数据库key的数量

11.flushdb

清空当前库

12.flushall

通杀全部库

数据类型命令及落地运用

命令查询:Commands | Docs (redis.io)

1.String字符串

1.最常用

set key value(set命令)

有5个可选参数(EX,PX,NX,XX,KEEPTTL):

EX:以秒为单位的设置过期时间        eg:SET   k1   v1   EX  5       (5秒后过期)

PX:以毫秒为单位的设置过期时间    eg:SET   k1   v1   PX  5       (5毫秒后过期)

EXAT:设置以秒为单位的UNIX时间戳所对应的时间为过期时间   

PXAT:设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间

NX:键不存在的时候设置键值

XX:键存在的时候设置键值

KEEPTTL:保留设置前指定键的生存时间

GET:先返回key里的值再覆盖

2.同时设置/获取多个键值

MSET/MGET:

MSETNX:

3.获取指定区间范围的值

GETRANGE:(类似于Java的subSting字符串截取)

SETRANGE:

4.数值增减

一定要是数字才能增减

1.递增数字 INCR key

2.增加指定数值 INCRBY key 5

3.递减数字 DECR key

4.递减指定数值 DECRBY key 5

5.获取字符串长度和内容增加

STRLEN key:获取字符串长度

APPEND key value:尾部增加

6.分布式锁

SETEX:

7.getset:

8.应用场景:

分布式锁

2.List列表

单 key 多value

1.常用

1.lpush/rpush/lrange

lpush 是先进后出队列,rpush 是先进先出队列

2.lpop/rpop

lpop 从右边弹走数值,rpop 从左边弹走数值

3.lindex

按照索引下标获取元素

4.llen

获取list中元素的个数

5.lrem key 数字N 给定值v1

删除N个 值等于v1 的 元素

6.Ltrim key 开始索引start 结束索引end

只保留 start 到 end之间的元素,其他元素都去除掉。

7.rpoplpush 源列表 目标列表

8.lset key index value

list列表索引为index的属性赋值。

9.linsert key before/after 已有值 插入的新值

10.应用场景

3.Hash哈希

KV模式不变,但是V是一个键值对

1.常用

1.hset/hget/hmset(官方不建议)/hmget/hgetall/hdel

hset:

hget:

hmget:

hgetall:

hdel:

2.hlen

获取某个key内的全部数量

3.hexists key filed

判断key里存不存在filed

4.hkeys/hvals

5.hincrby/hincrbyfloat

给数值类型的整数加值,给浮点类型的数值加值

6.hsetnx

不存在的话赋值,存在的话不操作

7.应用场景

购物车

JD购物车早期 设计目前不再采用,当前小中厂可用

4.Set集合

单值 多value  且无重复

1.常用

1.SADD key member [member..]

添加元素,自动去重复

2.SMEMBERS key

遍历集合中所有元素

3.SISMEMBER key member

判断元素是否 存在 在集合中

4.SREM key member [member..]

删除元素

5.scard 

获取集合里的元素的个数

6.SRANDMEMBER key [数字]

从集合中随机展现设置的数字个数元素,元素不删除

7.SPOP key [数字]

从集合中随机弹出 [数字] 个元素,元素删除

8.SMOVE key1 key2 在key1里已存的值 

将key1 里的 已存的值 赋值给 key2

2.集合运算

1.集合的差集运算 A-B   (SDIFF key [key...])

属于A但不属于B的元素构成的集合

2.集合的并集运算 A∪B (SUNION key [key..])

3.集合的交集运算 A∩B (SINER key [key..])(SINTERCARD numkeys key [key ...][LIMIT limit])

SINER key [key..]

SINTERCARD numkeys key [key ...][LIMIT limit]

不反回交集集合,只返回交集集合里的元素个数,numkeys就是key的个数

3.应用场景

1.微信抽奖小程序spop

2.微信朋友圈点赞(查看同赞朋友)

3.社交(你可能认识的人,猜你喜欢)

求差集

5.ZSet有序集合

在set基础上,每个val值前加一个score分数值:之前set是k1V1 v2 v3,现在zset是k1 score1 v1 score2 v2

1.常用

1.ZADD key score v1 [score2 v2...]

2.ZRANGE key start end [WITHSCORES]

按照元素分数从小到大的顺序返回索引从start到end之间的所有元素

3.ZREVRANGE key start end [WITHSCORES]

反转把分数从大到小排

4.ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

获取指定分数范围的元素

5.ZSCORE key member

获取对应元素的分数

6.ZCORD key

获取集合中元素的值

7.ZREM   key  某score下对应的value值

删除元素

8.ZINCRBY key [数字] member

给member的 score 加 [数字] 分

9.ZCOUNT key min max

获取指定分数范围内的元素的 个数

10.ZMPOP keynumber key [key..] min/max count number

从keynumber个表(也就是key)中弹出最大或最小的number个元素

11.ZRANK key value值 

获取下标

12.ZREVRANK key value值

逆序获取下标值

2.应用场景

根据商品的销售对商品进行排序展示

6.BitMap位图

由0和1状态表现的二进制位的bit数组

1.位图用在那些地方

1.用户是否登陆过Y、N,比如京东每日签到送京豆

2.电影、广告是否被点击播放过

3.钉钉打卡上下班,签到统计

2.位图是什么

3.位图能干嘛

用于状态记录

4.基本命令

1.setbit key offset value

offset:偏移位

2.getbit

3.strlen

统计字节数占用了多少

不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容

4.bitcount

全部key里含1的总数是多少

5.bittop

6.getbit和setbit案例

7.应用场景

占用内存少,还快

7.HyperLogLog基数统计

作用:统计某个网站的 UV ,统计某篇文章的 UV

什么是UV:  Unique Visitor,独立访客,一般理解为客户端IP

统计用户搜索网站关键词的数量

1.HyperLogLog是什么:

去重复的基数估计算法-HyperLogLog

优点:在输入元素的数量或者体积非常大的时候,计算基数所需的空间总是固定的,很小的.

在Redis里,每个HyperLogLog键只需要花费12kb的内存,就可以计算接近2^64个不同元素的基数,但是,HyperLogLog只是会记录基数,而不记录元素(比如只会记录今天的访问量是1亿,而不会记录1亿条记录)

基数是什么:

2.基本命令

1.PFADD key element [element...]

这里的hllo1只是存了1 3 5 7 9去重以后的基数 5

2.PFCOUNT key

3.PFMERGE 新建key key key [key...]

统计key的基数放进 新建key里

8.GEO地理空间

底层数据类型:ZSet (key score value)->GEO(key 经纬度 value)

2.命令实操

1.如何获取某个地址的经纬度

拾取坐标系统

2.GEOADD 

多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中     

处理中文乱码:

3.GEOPOS key 

返回经纬度

4.GEOHASH key 

二维再变一维 base32编码

5.GEODIST key member1 member2 [m|km..]

计算两个地址的距离

6.GEORADIUS key 指定为圆心的经纬度 半径 withdist withcoord count 10 withhash desc

WITHDIST:在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。

WITHCOORD:将位置元素的经度和维度也一并返回。

7.GEORADIUSBYMEMBER key member 半径 withdist withcoord count 10 withhash

9.Stream流

就是Redis版本的MQ,消息中间件

1.stream流是什么:

Redis版的MQ消息中间件+阻塞队列

2.能干嘛

实现消息队列,它支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加的稳定和可靠.

3.底层结构和原理说明

一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的 ID 和对应的内容

4.基础命令

1.队列相关指令
1.XADD

添加消息到队列末尾,消息的ID必须比上一个ID大,默认用 * 是自动生成

2.XRANGE key - +

3.XREVRANGE key + -

上面指令的反转降序展示

4.XDEL key 主键

删除消息

5.XLEN key 

消息的个数

6.XTRIM key MAXLEN|MINID  数字|ID

用于对stream的长度进行截取

MAXLEN: 允许的最大长度,对流进行修剪和限制长度

MINID: 允许的最小ID ,从某个ID值开始比该ID小的将会被抛弃

7.XREAD

用于获取消息(阻塞/非阻塞),只会返回大于指定ID的消息

1.非阻塞

2.阻塞

8.小总结(类似Java的阻塞队列)

Stream的基础方法,使用xadd存入消息和xread循环阻塞读取消息的方式可以实现简易版的消息队列,交互流程如下

2.消费组相关指令
1.XGROUP CREATE

用于创建消费者组

2.XREADGROUP GROUP

消费组的目的:

3.重点问题

4.XPENDING

查询每个消费组内所有消费者「已读取、但尚未确认」的消息

5.XACK

向消息队列确认消息处理已完成

10.BitField位域

了解即可

将一个Redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值