Redis学习笔记

Redis学习笔记

一、NoSQL数据库简介

二、redis6概述和安装

​ 与memcache的不同点

  • memcache支持单一数据类型 redis支持多种数据类型
  • memcache不支持持久化 redis支持持久化
  • memcache采取多线程+锁的机制 redis采用单线程+io多路复用

三、常用五大数据类型

1. Redis 字符串

String是Redis最基本的类型 是二进制安全的 value最多512M

incrby decrby 命令具有原子性,不会被线程调度机制打断。(将val增加或减少某值)

  • 数据结构:String的数据结构为简单动态字符串。是可以修改的字符串,内部结构实现上类似于Java中的ArrayList,采用与分配冗余空间的方式来减少内存的频繁分配 如果字符串小于1M时,扩容都是加倍现有的空间,超过1M,每次只扩容1M的空间。最大的长度不允许超过512M

2. Redis 列表

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

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

lpush/rpush lpop/rpop

  • 数据结构:quickList 首先在列表元素较少的情况下使用一块连续的内存存储,这个结构时ziplist,也就是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存;当数据链比较多的时候次才会改成quickList。因为普通的链表需要的附加指针空间太大,会比较浪费空间。结构上还需要两个额外的指针prev和next
  • redis将链表和ziplist结合起来组成了quickList。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余

3. Redis 集合

Redis set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)

sadd/smembers/sismember/scard(长度)/srem(删除)/spop(随机取)/srandmember(随机取,不会删除)/smove/sinter(交集)/sunion(并集)/sdiff(差集)

4. Redis 哈希

Redis hash是一个String类型的field和value的映射表,hash特别适合用户存储对象。类似Map<String, Object>

hset/hget/hmset/hmget/hexists/hkeys/hvals/

  • 数据结构:hash类型对应的数据结构时两种,ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable

5. Redis 有序集合

Redis 有序集合zset与普通集合set,是一个没有重复元素的字符串集合。每个成员都关联了一个评分,集合的成员是唯一的,得分可以重复。

zadd()/zrange( )

  • 数据结构:
    • hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value的唯一性,可以通过元素value找到相应的score值
    • 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表

四、Redis配置文件详解

  • units —> 单位,只支持bytes,大小写不敏感
  • include
  • network
    • bind:接受某个IP访问
    • Protected-mode 是否支持远程访问
    • Port 端口号
    • Tcp-backlog 正在进行三次握手包括已经完成的队列总和
    • Timeout 多长时间超时(0为永不超时)
    • Tcp-keepalive (每隔300s检测连接是否活着)
  • daemonize 是否支持后台启动
  • pidfile 保存进程号的文件路径
  • loglevel (日志级别)
    • debug
    • verbose
    • notice
    • warning
  • Logfile 日志文件在哪
  • databases 几号库

五、发布和订阅

Redis 发布订阅是一种消息通信模式:发送者发送消息,订阅者接受消息

Redis客户端可以订阅任意数量的频道

六、Redis新数据类型

1. Bitmaps(类似 编程之美中用二进制数来存储象棋状态)

  • Bitmaps 本身不是一种数据类型,实际上它就是字符串,但是它可以对字符串的位进行操作
  • Bitmaps 单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同,可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量

2. HyperLogLog(占用内存小,类似set去重)

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

3. Geospatial

  • 地理信息

七、Jedis操作Redis

自己看文档去!!!

八、Redis与Spring Boot整合

同上!!!

九、Redis的事务操作

1. Redis的事务定义

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程汇总,不会被其他客户端发送来的命令请求所打断。

Redis事务的主要作用就是串联多个命令防止别的命令插队

2. Multi、Exec、discard

从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis才会将之前的命令队列中的命令依次执行。

组队的过程中可以通过discard来放弃组队。

3. 事务的错误处理

  • 如果在命令队列中有一个语法错误,那么这个队列将被全部放弃(编译时错误)
  • 单独隔离,若语句语法正确但是执行错误,例如让字符串+1,该语句报错(运行时错误)

4. 事务冲突的问题

  • 例子:类似超卖现象
  • 悲观锁:阻
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值