Redis基础

看到就要学习的小事项:

磁盘查询数据的速度的限制,除了寻址的时间限制,还有就是磁盘也有带宽的限制,所以当一个高并发的查询到达数据库,就算有索引为什么还是慢,其实也是被磁盘的带宽限制了,当一部分并发充满了磁盘的带宽,其他线程就只能等待了。

数据库的排名:DB-Engines - Knowledge Base of Relational and NoSQL Database Management Systems

安装redis

epoll的发展

(1).最开始的网络模型为阻塞的方式,也就是一个socket就使用一个线程来读取数据,如果没有数据这个线程就一直在read处阻塞住

 弊端:一个线程负责一个连接,造成资源的浪费,在阻塞的时候线程什么也不做

(2) 后来read方法变为了非阻塞的方法,多线程的方式就被取代了,循环所有的socket询问是否有数据进来了

 弊端:每一次询问的结果都是从用户态到内核态的一次切换,而且每次会把所有的socket进行一次循环,如果这时候客户端没有发来数据,那么这次询问将是无意义的

(3) 再后来select函数出现了,这个函数完全是在内核当中,将收到数据的socket返回给用户,

这样用户再去read的时候,这样用户就不会有无意义的用户态到内核态的切换

弊端:所有的socket其实在用户态和内核态来回传递

(4)为了解决上面的弊端就出现了epoll,出现了一个用户态和内核态的共享空间mmap

 epoll的执行流程就是,当用户态产生了这些sokcet之后,就会放入共享空间mmap,然后epoll函数就开始不断监听共享空间的socket是否有数据进来了,如果有,就放入链表当中,供用户空间的线程去调用,这样就使用一个共享空间避免了,数据在用户态和内核态之间的传递

redis一些常用的命令:

1.通过这个命令 help @generic 查看redis常用的基本命令 ,下同并且按Tab可以切换  

help @string

2. 通过这个命令 type 可以查看一个key的类型

二进制安全

redis在存储字符串的时候其实本质是存储的字节,比如说如果客户端的字符集编码是UTF-8

那么redis 存储的中文就是,三个字节,如果字符集编码是 GBK那么中文就是两个字节,这个时候

如果不设置 --raw 在get一个中文的时候只能取出字节的16进制表达形式,如果设置了将按照客户端的字符集来展示存入的中文,当然存入英文和数字的时候,就是一个字符一个字节了

类似  set a 999 

strlen a

就得到3

String类型

1.字符串 基本的操作不写了,按照范围取值,按照范围替换 

不存在的时候才设置(set k1  ooxx nx) ,存在的时候才设置(set k2 hello xx) 

设置新值,并且返回老值 GETSET

2.数值  自增1 自减1  增加指定数字 减去指定数字 增加指定小数

3.位图 设置名称为k1的位图第七个下标为1 setbit k1 7 1

bitpos 在指定的8位数字当中找到 是否含有这个数字,然后返回下标

bitpos k1 1 0 0,在k1当中找 1 从第0个byte开始到第0个byte结束

bitcount k1 0 1 在0到1这个字节区间内 1 出现了几次

bitop and andkey k1 k2 与或非操作  and就是与的操作  andkey就是目标key

字符集 :

1.ascii 就八位 0XXX XXXX 

2.其他都叫扩展字符集,不对ascii做改变只做补充

两个位图使用的例子:

1.在随机时间范围内,用户是否登录,登录过几次?

以用户id为key,然后建立位图,位图的第一位就是第一天,如果登录了 就变为1

2.在随机时间范围内,判断用户是否为活跃用户,只要登录过就算活跃用户

以时间为key,用户id为位图索引下标,只要用户登录过,用户id指定的索引下标就变为1

然后把位图进行或运算,是1的就是活跃用户

List类型:

1.list 这个类型根据命令的调用不同,既可以实现栈也可以实现队列,阻塞队列

还可以实现数组也就是根据下标进行操作(甚至可以实现在指定的位置之前插入数据)

注意:这个阻塞队列其实是一个单播的队列,也就是如果十个客户端,都因为这个阻塞队列没有数据被阻塞了,当队列有数据之后,只有一个客户端可以拿到队列里面的数据

 Hash类型:

1.其实就是把 java当中的hashmap作为value 只有一个map 不是map集合

2.hash类型当中的int 就像string一样可以进行计算的

set类型:

跟list的区别在于:set是不可以有重复的,list是可以有重复的,并且set是乱序的

1.并且可以做交集,并集,差集

2.随机事件 用于抽奖

sortset类型:

有序的set,但是用什么来决定排序?

1.使用score来决定排序顺序,当然score分数相同的时候,是按照名称的字典序来排的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于学习Redis基础知识,可以按照以下思路进行学习: 1. 了解Redis的概念和特点:首先需要了解Redis是什么,它的主要特点是什么,它为什么被广泛应用于缓存、消息队列、会话管理等场景。 2. 安装和配置Redis:根据你的操作系统,安装Redis并进行相关配置。可以参考Redis官方文档或其他教程来完成这一步。 3. 学习Redis的数据结构:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。了解每种数据结构的特点、用途和操作命令,并通过实际操作来加深理解。 4. 掌握Redis的常用命令:学习Redis的常用命令,如get、set、hget、hset、lpush、lrange、sadd、smembers等,了解每个命令的具体用法和参数含义。 5. 理解Redis的持久化机制:了解Redis的RDB和AOF两种持久化方式,以及它们的优缺点。学习如何进行备份和恢复数据。 6. 学习Redis的事务和Lua脚本:了解Redis事务的基本概念和使用方法,以及如何使用Lua脚本来进行复杂的操作。 7. 深入了解Redis的性能优化和高可用方案:学习如何优化Redis的性能,包括配置调优、使用合适的数据结构、合理地使用缓存等。同时了解Redis的高可用方案,如主从复制、哨兵模式和集群模式。 8. 学习Redis与其他技术的结合:了解Redis如何与其他技术进行结合,如与Python、Java等编程语言的配合使用,以及与Spring、Django等框架的整合。 以上是学习Redis基础知识的一个思路,你可以根据自己的实际情况和需求进行学习和拓展。推荐参考一些经典的Redis教程和实战案例,通过实际操作和项目实践来提升自己的技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值