自学Redis7入门篇一

Redis概述

一、Redis是什么?

Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。
Redis之父—安特雷兹
Github: https://github.com/antirez
个人博客: http://antirez.com/latest/0

在这里插入图片描述

二、Redis能干什么?

在这里插入图片描述

与传统数据库关系(mysql)
Redis是key-value数据库(NoSQL一种),mysql是关系数据库
Redis数据操作主要在内存,而mysql主要存储在磁盘
Redis在某一些场景使用中要明显优于mysql,比如计数器、排行榜等方面
Redis通常用于一些特定场景,需要与Mysql一起配合使用
两者并不是相互替换和竞争关系,而是共用和配合使用

主流功能与应用
1.分布式缓存,挡在MySQL数据库之前的带刀护卫
2.内存存储和持久化(RDB+AOF)Redis之前异步将内存中的数据写到硬盘上,同时不影响继续服务。
3.高可用架构搭配(单机,主从,哨兵,集群)
4.缓存穿透,击穿,雪崩
5.分布式锁
6.队列(Reids提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。
我们常通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,
对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比 较适合适用。)
7.排行榜+点赞(在互联网应用中,有各种各样的排行榜,如电商网站的月度销量排行榜、社交APP的礼物排行榜、小程序的投票排行榜等等。Redis提供的zset数据类型能够快速实现这些复杂的排行榜。
比如小说网站对小说进行排名,根据排名,将排名靠前的小说推荐给用户)

redis优势
性能极高- Redis能读的速度是110000次/秒,写的速度是81000次/秒
Redis数据类型丰富,不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Redis支持数据的备份,即master-slave模式的数据备份。
在这里插入图片描述

三、去哪里下

官网地址:
英文:https://redis.io/
中文:http://www.redis.cn/
https://www.redis.com.cn/documentation.html

下载安装包
https://redis.io/download/ 本次下载 redis-7.0.0.tar.gz

其它文档资料
Redis源码地址 https://github.com/redis/redis 中国大陆打开慢 多刷几次或梯子试试
Redis在线测试 https://try.redis.io/
Redis命令参考 http://doc.redisfans.com/

四、Redis安装配置

Linux安装Redis参考 https://blog.csdn.net/weixin_43154319/article/details/138249899?spm=1001.2014.3001.5501

五、Redis 10数据类型

在这里插入图片描述
注意: 这里说的数据类型是value的数据类型,key的类型都是字符串

1.字符串(String)

String(字符串)
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

2.列表(List)

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

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

3.哈希表(Hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)

4.集合(Set)

Set(集合)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable。
Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(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)

在这里插入图片描述由0和1状态表现的二进制位的bit数组

9.位域(bitfield)

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

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

10.流i(Stream)

Redis Stream 是 Redis 5.0 版本新增加的数据结构。

Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。

而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失

六、常见数据操作类型命令

官网英文:https://redis.io/commands/
官网中文:http://www.redis.cn/commands.html

七、Redis 键(key)

常用
在这里插入图片描述
案例
keys * e 查看当前库所有的key
exists key 判断某个key是否存在
type key 查看你的key是什么类型
del key 删除指定的key数据
unlink keye 非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
expire key 秒钟 为给定的key设置过期时间
move key dbindex【0-15】 将当前数据库的 key移动到给定的数据库 db 当中
select dbindex 切换数据库【0-15】,默认为0
dbsize 查看当前数据库key的数量
flushdb 清空当前库
flushall 通杀全部库

八、10大数据类型命令操作运用场景

注意:命令不区分大小写,而key是区分大小写的
查看命令API , help@类型(例如:help@string;help@list;help@hsah;)

字符串(String)

常用语法
set  key value  //设置值
get  key 		//获取值

同时设置、获取多个值
MSET key value [key value ....]
MSET key [key ...]
mset/mget/msetnx

27.0.0.1:6379> mset key1 aa key2 bb key3 cc
OK
127.0.0.1:6379> mget key1 key2 key3
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379> 

获取指定区间范围内的值,类似between......and的关系
--从零到负一表示全部

127.0.0.1:6379> set key5 abcd1234
OK
127.0.0.1:6379> getrange key5 0 -1
"abcd1234"
127.0.0.1:6379> 

数据增减 (一定是数字才能进行加减)
INCR key  //递增数值  
INCRBY key increment  //增加指定的整数
应用场景:1、比如抖音点赞某个视频或者商品,点一下加一次;
		2、是否喜欢的文章

DECR key  //递减数值
DECRBY key decrement //减少指定的整数

STRLEN key //获取字符串长度
APPEND key value //内容追加

getset key value //getset一起使用

//分布式锁
setex:设置带过期时间的key,动态设置。
setex 键 秒值 真实值
语法: set key value

127.0.0.1:6379> setex k8 15 hello
OK
127.0.0.1:6379> ttl k8
(integer) 6
127.0.0.1:6379> ttl k8
(integer) 3
127.0.0.1:6379> ttl k8
(integer) 1
127.0.0.1:6379> ttl k8
(integer) -2
127.0.0.1:6379>

列表(List)

常用命令
在这里插入图片描述

一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。

left、right都可以插入添加;

如果键不存在,创建新的链表;

如果键已存在,新增内容;

如果值全移除,对应的键也就消失了。

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

在这里插入图片描述

lpush/rpush/lrange //将一个或多个值插入到列表头部
lpop/rpop  //移出并获取列表的第一个元素/rpop 移除列表的最后一个元素,返回值为移除的元素。
lindex //按照索引下标获得元素(从上到下)
llen //获取列表中元素的个数
Irem key 数字N 给定值v1 解释(删除N个值等于v1的元素)
ltrim key 开始index 结束index,截取指定范围的值后再赋值给key 
rpoplpush 源列表 目的列表 
lset key index value 
linsert key before/after 已有值 插入的新值 
应用场景 -- 微信公众号订阅的消息

哈希(Hash)
常用命令
在这里插入图片描述

KV模式不变,但V是一个键值对: Map<String, Map<object, objiect>>

hset/hget/hmset/hmget/hgetall/hdel
hlen  获取某个key内的全部数量
hexists key 在key里面的某个值的key
hkeys/hvals
hincrby/hincrbyfloat 
hsetnx 

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

新增商品 → hset shopcar:uid1024 334488 1

新增商品 → hset shopcar:uid1024 334477 1

增加商品数量 → hincrby shopcar:uid1024 334477 1

商品总数 → hlen shopcar:uid1024

全部选择 → hgetall shopcar:uid1024
在这里插入图片描述

集合(Set)
常用命令
在这里插入图片描述

单值多value ,且无重复

SADD key member [member …] 添加元素
SMEMBERS key 遍历集合中的所有元素
SISMEMBER key member 判断元素是否在集合中
SREM key member [member …] 删除元素
scard,获取集合里面的元素个数
SRANDMEMBER key[数字] 从集合中随机展现设置的数字个数元素,元素不删除
SPOP key[数字] 从集合中随机弹出一个元素,出一个删一个
smove key1 key2 在key1里已存在的某个值 将key1里已存在的某个值赋给key2

集合运算
在这里插入图片描述
应用场景
微信抽奖小程序
微信朋友圈点赞查看同赞朋友
QQ内推可能认识的人

有序集合Zset(sorted set)
在这里插入图片描述
在这里插入图片描述
在set基础上,每个val值前加一个score分数值。
之前set是k1v1 v2 v3,现在zset是k1 score1 v1 score2 v2

向有序集合中加入一个元素和该元素的分数
ZADD key score member [score member ...] 添加元素
实例:zadd zset1 60 v1 70v2 80 v3 90 v4

ZRANGE key start stop [WITHSCORES] 按照元素分数从小到大的顺序 返回索引从start到stop之间的所有元素
Zrevrange
实例:ZREVRANGE zsetl 0 -1 withscores

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 
获取指定分数范围的元素 withscores;不包含; limit作用是返回限制 limit开始下标步 多少步

bC5 ZSCORE key member 获取元素的分数
ZCARD key 获取集合中元素的数量
zrem key 某score下对应的value值,作用是删除元素
ZINCRBY key increment member 增加某个元素的分数
ZCOUNT key min max获得指定分数范围内的元素个数
ZMPOPO  从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员分数对 
bzrank key values值,作用是获得下标值
zrevrank key values值,作用是逆序获得下标值 

应用场景
根据商品销售对商品进行排序显示
在这里插入图片描述

位图(bitmap)

需求:
1.用户是否登录过Y、N 比如京东每日签到送京豆
2.电影,广告是否被点击播放过
3.钉钉打卡上下班,签到统计

是什么:
在这里插入图片描述

能干嘛:
用于状态统计——》Y,N 类似AtomicBoolean

在这里插入图片描述

setbit key offset value  //setbit 键 偏移位 只能零或者1
Bitmap的偏移量是从零开始算的
getbit  getbit key offset
strlen  统计字节数占用多少
bitcount  全部键里面含有1的有多少个?
bitop
setbit和getbit案例说明 --》 按照天 

基数统计(HyperLogLog)

Redis地理空间(GEO)

流(Stream)

位域(bitfield)

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值