Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
安装之间由于 redis 是用 C 语言编写的,这儿需要安装 GCC 和 C++ 环境输入命令 “ yum install -y gcc-c++” 即可。
当然还是先下载 Redis 包咯,"https://redis.io/" 进行下载最新版本。
下载完成后直接拷贝到服务器上,如下图:
安装前需要对Redis包进行解压,输入 " tar -zxf redis-4.0.2.tar.gz " 进行解压,解压完成后,如下图:
然后需要进入解压后的Redis目录,输入 " make " 对Redis 进行编译,如下图:
注意,一定要进入Redis目录make对Redis才起作用,有的朋友看完半截就开始操作,结果没用!
安装Redis,默认安装,输入 " make install ",如需要将Redis 安装到指定的目录,使用PREFIX后面跟路径,
输入 " make install PREFIX=/usr/local/redis " 进行安装,如下图:
启动前,需要进入Redis的启动目录 ,输入 " cd /usr/local/redis/bin " 命令,进入Redis的启动目录,如下图:
启动方式,有两种:
第一种启动方式,称为前端启动模式,输入 " ./redis-server " 进行启动,如下图:
第二种启动方式,称为后端启动模式,后端启动需要在启动时指定Redis的启动配置文件,先进入到Redis的解压包中,
输入 " cp redis.conf /usr/local/redis/bin "将redis.conf复制到启动目录中,如下图:
编辑redis.conf配置文件,将 " daemonize no " 修改为 " daemonize yes " ,然后保存,如下图:
配置完成后,就可以启动了,输入命令 " ./redis-server redis.conf ",进行启动,查看是否启动完成,
输入命令 " ps aux|grep redis " 能看到了ip及端口号,说明启动成功,如下图:
再链接到redis输入命令 " ./redis.cli " 进行连接,链接好了,就可以尽情的get/set了,快去享受Redis给你带来的快感吧!!!,如下图:
好了!以上为CentOs 7 安装 Redis 服务器 的全部操作内容,在下一期,我还会继续编写关于Redis集群环境的教程;歇后语:“共同学习,共同进步”,也希望大家多多关注CSND的IT社区。
新增key : set keyname keyvalue
获取key : get keyname
取出当前匹配的所有key : keys *
当前的key是否存在 : exists keyname
删除当前key : del keyname
设置过期时间(单位:秒):expire keyname 10
移动keyname键值对到1数据库 : move keyname 1
移除当前key的过期时间 : persist keyname
随机返回一个key :randomkey
重命名key : rename
返回值的数据类型 : type
测试连接是否还在 : ping
打印 : echo name
数据库切换 : select 1~16
退出连接 : quit
当前数据库中key的数量 : dbsize
服务器基本信息 : info
实时转储收到的请求 : monitor
获取服务器的参数配置 : config get
清空当前数据库 : flushdb
清除所有数据库 : flushall
Redis的外围由一个键、值映射的字典构成。
与其他非关系型数据库主要不同在于:Redis中值的类型不仅限于字符串,还支持如下抽象数据类型:
字符串列表;
无序不重复的字符串集合;
有序不重复的字符串集合;
键、值都为字符串的哈希表;
redis提供五种数据类型:string,hash,list,set及zset(sorted set)
string(字符串):
string是最简单的类型,一个key对应一个value。
list(双向链表):
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。
dict(hash表):
set是集合,和我们数学中的集合概念相似,对集合的操作有添加/删除元素,有对多个集合求交并差等操作。
zset(排序set):
zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。
redis使用了两种文件格式:全量数据和增量请求。
全量数据:
全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;
增量请求:
增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。
redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。
save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。
appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。
appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。
在实际Redis的使用过程中,redis实际上的内存管理成本非常高,即占用了过多的内存,所以在Redis的配置文件中也提供了一系列的参数和手段来控制和节省内存,如下具体配置简介:
首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也非常的高,对于Redis的持久化策略并不成熟,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no。
其次最好设置下redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。
另外Redis为不同数据类型分别提供了一组参数来控制内存使用,注意Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中有如下配置项 :
hash-max-zipmap-entries 64 :
当value这个Map内部不超过多少个成员时会采用线性紧凑格式存储,默认是64,即value内部有64个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的HashMap。
hash-max-zipmap-value 512 :
当 value这个Map内部的每个成员值长度不超过多少字节就会采用线性紧凑存储来节省空间。
总结:
以上2个条件任意一个条件超过设置值都会转换成真正的HashMap,也就不会再节省内存了,那么这个值是不是设置的越大越好呢,答案当然是否定的,HashMap的优势就是查找和操作的时间复杂度都是O(1)的,而放弃Hash采用一维存储则是O(n)的时间复杂度,如果
成员数量很少,则影响不大,否则会严重影响性能,所以要权衡好这个值的设置,总体上还是最根本的时间成本和空间成本上的权衡。