Redis 数据库 ---- 基础操作篇

第一部分---Redis简介

Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

【BSD协议:是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或者以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
一. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
二.如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
三.不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销 售,因此是对商业集成很友好的协议。
很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者 二次开发。】

key-value数据库:一种以键值对存储数据的一种数据库,类似Java中的map或者是python中的dict,每一个键对应着唯一的值。其特点是具有较高的并发读写性能。
redis是属于Nosql类型的数据库,所谓的Nosql数据库,泛指非关系型数据库,是非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。
优点:
1.用户可以根据需要去添加自己需要的字段,为了获取用户的不同信息,不像关系型数据库中,要对多表进行关联查询。仅需要根据id取出相应的value就可以完成查询。
2.适用于SNS(Social Networking Services)中,例如facebook,微博。系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库难以应付,需要新的结构化数据存储。由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
不足:
只适合存储一些较为简单的数据,对于需要进行较复杂查询的数据,关系型数据库显的更为合适。不适合持久存储海量数据。
本文介绍的Redis就是一种针对于高并发读写的内存数据库。
Redis的一些特点:支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候再次加载使用。不仅支持简单的key-value格式,同时还提供了list,set,zset,hash等数据结构的存储。
Redis支持对数据的备份,即master-slave模式(主从设备模式)的数据备份。
Redis的优势:性能极高,redis能读的速度是110000/s,写的速度也可以达到81000/s。
有丰富的数据类型。
redis的所有操作都是原子型的,同时还支持对几个操作全并的原子性执行。
redis还支持publish/subscribe(发布/订阅)功能,通知,key过期等特性。

第二部分---Redis的配置说明

redis.conf配置项说明
1.Redis默认不是以守护进程的方式进行,可以通过该配置项修改,使用yes启用守护进程。
Redis使用的是单进程多线程的模式,当以守护进程的方式进行时redis可以在后台运行,并默认的将进程的pid号写入redis.conf指定的文件中,若不特殊进行指定则默认为var/run/redis.pid文件,此时redis会一直运行,除非手动kill掉程序。(pid是系统给程序运行的独一无二的标识)
若是设置成no,则当前界面将进入redis的命令行界面,exit强制退出或者关闭连接工具都会导致redis进程退出。
2.port 6379为指定Redis监听端口,默认的端口为6379,其含义是MERZ,一个意大利歌女的名字。
3.bind 127.0.0.1绑定的主机地址
4.timeout 300 当客户端闲置多长时间连接关闭,如果指定为0,表示关闭该功能
5.loglevel verbose 指定日志记录级别,一共四个级别,debug,verbose,notice,warning

debug:会打印出很多信息,适用于开发和测试阶段
verbose(冗长的):包含很多不太有用的信息,但比debug要清爽一些
notice:适用于生产模式
warning : 警告信息(只有特别严重的警告信息会记录在日志中)

6.logfile stdout 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,这里又配置日志为标准输出,则日志会发送给/dev/null
7.databases 16 设置数据库的数量,默认为数据库0,可以通过select 1(其他数字)连接上指定的数据库
8.save <seconds> <changes>指定多长时间内,执行了多少次更新操作,就将数据同步到数据文件,可以多个文件配合。
redis默认配置中的三个条件为900秒有1个更改,300秒有10个更改,以及60秒内有10000个更改。

  1. rdbcompression yes 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
  2. dbfilename dump.rdb指定本地数据库文件名,默认值为dump.rdb
    11.dir ./指定本地数据库存放目录
    12.slaveof <masterip><masterport> 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
    13.masterauth<master-password> 当master服务设置密码保护时,slav服务连接master的密码
    14.requirepass foobared 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时,需要通过AUTH<password>命令提供密码,默认关闭
    15.maxclients 128 设置同一时间最大客户端的连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接,并向客户端返回max nunmber of clients reached
    16.maxmemory <bytes>指定Redis最大内存限制,Redis在启动时会把数据加载都内存中,达到最大内存后,Redis会先尝试清楚已到期或即将到期的Key,此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Rdis新的vm机制,会把key存放内存,Value存放在swap区(虚拟内存)---2.6版本已经被弃用
    17.appendonly no指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一部分数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
  3. appendfilename appendonly.aof 指定更新日志文件名,默认为appendonly.aof
  4. appendfsync everysec 指定更新日志条件,共有3个可选值:
    no:表示等操作系统进行数据缓存同步到磁盘(快)
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
    everysec:表示每秒同步一次(折衷,默认值)

第三部分--Redis的数据类型

Redis支持的数据类型有String,hash,set,list,zset
较高级的数据类型包含hyperloglog数据结构,提供了不精确但快速的不重复计数方案,即寻找基数,在统计网站uv经常使用,在redis中含有16384个桶,对应的是214次,表示十四位2进制数,Redis通过一种Murmurhash的算法将数据流变成64为的哈希形式,前十四位用来找到存放的桶,分桶的意义在于能够更加准确的进行估计,分桶求平均再乘以桶数这一过程可以最大的降低误差,注意我们求平均的方式是调和平均也就是利用倒数进行平均,这样的话会对于有些地方出现的极大值进行有效的处理,而使结果更加的准确,后五十位进行前置找最大长度零的运算,也就是相当于对这个比特串进行抛硬币的一个过程,因为已经分好了桶,所以只需要保存前置零数目最大的那组值,因为Hyperloglog不对值进行保存,只是计算基数而已,桶是6bit位的,最多的0只可能到达五十,转换为2进制就是110010为6bit,所以桶为6bit位刚刚好。因为在数量较少时其误差较大,所以会采用稀疏矩阵的方式,只有当数目大于阈值之后才会转换成稠密矩阵,存储空间位214*6/8=12K
hyperloglog的语句:1. pfadd key element //向hyperloglog添加元素 如果没有该key对应的hyperloglog则新建
2. pfcount key //查询key对应的基数
3.pfmerge destkey sourcekey //将两个key进行合并,求共同的基数
较高级的数据类型还包含GEO,是一种对于地理位置的数据类型,有以下的功能,
1.GEOADD key longitude latitude member [longitude latitude member ...] //将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。
geoadd cityGeo【key】 121.472644 31.231706 "上海"【经纬度,名称】
2.GEODIST key member1 member2 [unit] //返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值 单位为m km mi ft
3.GEOPOS key member [member ...] //从key里返回所有给定位置元素的位置(经度和纬度)
geopos cityGeo 北京
4.GEOHASH key member [member ...] //返回一个或者多个地方的标准GEOHASH编码这个编码是个一维的字符串,经常利用于地图中,例如查询周围店家的时候经常会利用GEOHASH进行距离识别,可以用GEOHASH作为key,地址的营业信息作为value。一般来说字符串前缀内容匹配的越多,则内容越接近。
geohash cityGeo 北京
5.GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] //以指定经纬度为中心。返回在半径范围内的所有元素可以指定WITHDIST返回距离,WITHCOORD返回经纬度,WITHHASH返回geohash值
可以指定ASC或DESC,根据距离来排序 可以指定COUNT限定返回的记录数
georadiusbymember cityGeo 北京 100 km WITHDIST WITHCOORD ASC COUNT 5
6.GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] //与上面的类似,只不过这个是以地点为半径,进行检索
georadiusbymember cityGeo 北京 100 km WITHDIST WITHCOORD ASC COUNT 5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352