Hi,咱们好,我是抢老婆酸奶的小肥仔。
在日常开发中,咱们或多或少都会运用到NoSQL数据库,常用的有MongoDB,Redis等,其中Redis应该是运用比较广泛的一种非关系型数据库。下面咱们从最基础开端,来学学Redis吧,期望对咱们有所协助。 不废话,直接开干。
1、在usr/locate下创建redis目录
cd /usr/local
mkdir redis
2、下载装置包并上传到redis目录
redis装置包的下载路径:download.redis.io/releases/
3、解压装置包,装置gcc
tar -zxvf redis-6.2.1.tar.gz
yum install gcc
4、编译redis
make && make install
编译完成后,在/usr/local/bin目录下检查装置目录:
.redis-benchmark
:性能测试东西
.redis-check-aof
:修正有问题的AOF文件
.redis-check-dump
:修正有问题的dump.rdb文件
.redis-sentinel
:redis集群运用
.redis-server
:redis服务器发动指令
.redis-cli
:客户端,操作进口
5、redis操作
5.1 redis发动
5.1.1 前台发动
前台发动直接运用redis-server
进行发动,这样在窗口封闭后redis会跟随窗口一同封闭
5.1.2 后台发动
后台发动时,不会跟随窗口的封闭而封闭redis
过程:
1、复制redis.conf文件到/etc目录
cp /usr/local/redis/redis-6.2.1/redis.conf /etc/
2、修正/etc/redis.conf中的配置,将后台发动设置daemonize改成yes,即将其改成看护线程。
daemonize yes
3、发动redis
redis-server /etc/redis.conf
4、检查redis进程,确认是否正常发动
ps -ef|grep redis
5.2 封闭redis
1、 直接kill kill -9 pid
2、redis-cli shutdown
5.3 进入redis指令窗口
履行redis-cli
进入redis指令窗口,履行redis指令
redis-cli
5.4 redis指令
参阅当时链接文档:doc.redisfans.com/
5.6 redis的介绍
- 默认端口6379
- 默认16个数据库,下标从0开端
- 运用select 来切换数据库
- 一致暗码办理,一切库暗码相同
- dbsize:检查当时数据库key的数量
- flushdb:清空当时库
- flushall:清空一切库
- redis是单线程+多路IO复用
多路复用:运用一个线程来检测多个文件描述符(socket)的安排妥当状况,传入多个文件描述符,假如有一个文件描述符安排妥当,则回来,否则阻塞到超时,得到安排妥当状况后进行真正的操作,操作能够在同一个线程里,也能够发动线程履行。
注:redis6.0中供给了多线程,指令解析和IO数据读写这部分选用多线程,指令的履行还是选用单线程,多个客户端发送指令在同一个线程去履行,相当于排队履行,效率极高。
5.7 redis五大数据类型
-
string
:数据结构为简略动态字符串(Simple Dynamic String 缩写SDS),能够修正字符串,内部结构相似于ArrayList,选用分配冗余空间的方法来削减内存的频频分配。
如图:capacity为内部为当时字符串实践分配的空间,比实践字符串len要长。
- 当字符串长度小于1M时,则双倍扩展现有空间
- 当字符串长度大于1M时,则会多扩容1M空间
-
List
:数据结构为快速链表quickList
- 当列表元素较少时,运用一块接连的内存存储,即ziplist,将一切元素紧挨着一同存储,分配一块接连的内存
- 当列表元素较多时,则改成quickList,即链表与ziplist结合起来,也就是经过双向指针将ziplist串起来
-
set
:数据结构是字典,字典选用hash表完成,内部运用hash结构,一切的Value都指向同一个内部值。 -
hash
:数据结构是ziplist(压缩列表)、hashtable(哈希表)
- filed-value较短,个数较少时,运用ziplist
- filed-value较长,个数较多时,运用hashtable
-
zset
:与set相似,但会给每个成员相关一个评分(score)依据,这个评分从低到高的方法排序。 调集成员唯一,评分可重复
数据结构运用两种。
- hash表:相似Map<String,score>,key:调集的元素,value:元素对应的score,能够快速定位元素定义的score,时间复杂度为O(1);
- 跳表(skiplist):刺进、删去】查找复杂度为O(logN)。相似ConcurrentSkipListSet,依据score的值排序后生成一个跳表,能够快速依照方位的次序或score的次序查询元素。
跳表原理:
依据排序的数据,挑选出必定的值组成索引,查询时削减查询的次数。
首先从考虑一个有序表开端:
从该有序表中查找元素 < 23, 43, 59 > ,需要比较的次数分别为 < 2, 4, 6 >,一共比较的次数为 2 + 4 + 6= 12 次。有没有优化的算法吗? 链表是有序的,但不能运用二分查找。相似二叉查找树,咱们把一些节点提取出来,作为索引。得到如下结构:
这儿咱们把 < 14, 34, 50, 72 > 提取出来作为一级索引,这样查找的时候就能够削减比较次数了。咱们还能够再从一级索引提取一些元素出来,作为二级索引,变成如下结构:
这儿元素不多,体现不出优势,假如元素足够多,这种索引结构就能体现出优势来了。
redis的装置及基础数据类型就先说到这,期望对咱们有协助,谢谢咱们。
参阅: 《Redis全套学习笔记》 — 作者:路人