Redis环境搭建和代码测试及与GIS结合的GEO数据类型预研

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.背景

1.1传统MySQL+ Memcached架构遇到的问题

MySQL本身是适合进行海量数据存储的,通过Memcached将热点数据加载到cache从而加速访问,很多公司目前都采用这样的架构,但随着业务数据量和访问量的持续增长,我们遇到了很多问题:

a.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。

b.Memcached与MySQL数据库数据一致性问题。

c.Memcached数据命中率低或宕机,大量访问直接穿透到DB,MySQL无法支撑。

d.跨机房cache同步问题。

为解决以上问题,我们开始选择用Redis来替代Memcached。

1.2Redis简介

Redis是一种典型的NoSQL数据库服务器,它可以作为服务程序独立运行于自己的服务器主机。在很多时候,人们只是将Redis视为Key/Value数据库服务器,但是在目前的版本中,Redis除了Key/Value之外还支持List、Hash、Set和Ordered Set等数据结构,因此它的用途也更为宽泛。Redis的License是Apache License,就目前而言,它是完全免费。

我们经常会将memcached(数据缓存服务器)与Redis来进行对比,因为他们在使用方式上比较相似,而且也均是免费,均使用了内存来进行数据缓存。但是它们之间的最大区别在于memcached只是提供了数据缓存服务,一旦服务器宕机,之前在内存中缓存的数据也将全部消失, memcached没有提供任何形式的数据持久化功能,而Redis则提供了这样的功能。第二,Redis提供了更为丰富的数据存储结构,如Hash和Set等。

项目中经常在如下几个场景中使用Redis:Session共享,数据采集统计等。

2.Redis环境搭建  

2.1下载安装

Redis对于Linux是官方支持的,安装和使用参考官网(http://redis.io/download),但是Redis官方是不支持windows的,好在 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是:https://github.com/MSOpenTech/redis。打开后,直接使用浏览器下载或Git克隆即可:

 

直接双击redis-server.exe即启动一个redis服务实例,但是如果想以windows服务形式运行,需要执行一下命令:

//注册至服务管理中

redis-server --service-install redis.windows.conf --loglevel verbose --service-name Redis6379

成功后,开启服务即可:

 

2.2主从配置

Redis如mysql数据库一样,可以支持主从数据库配置,而且配置方式十分简单。将原有Redis安装文件再复制一份,打开Config文件,修改对应slaveof配置即可:

 

以上面提到的指令注册服务,运行该从数据库:

2.3密码和权限配置

Redis默认是没有密码的,为了数据的安全性需要我们自己启动权限控制和密码配置等。

2.3.1设置访问权限

打开config文件,找到bind关键字,修改其中绑定的IP即可:

 

2.3.2设置密码

同样打开config文件,找到requirepass关键字,将对应部分修改为指定密码:

 

注意,如果我们对主数据库设定了密码,那么slave数据库上在监听主数据库的配置中也要加上对应的密码:

 

2.4Redis可视化管理工具

这里我们使用RedisDesktopManager来管理Redis数据库。在官网上(https://redisdesktop.com/download)下载完该工具后,本地安装后连接至数据库上:

 

单击主数据库文件中的redis-cli.exe,输入测试命令:

 

在输入获取Value的命令,发现已经成功:

 

同时,在可视化工具中能看到,主从数据库中均已同步:

 

3.Java操作

3.1依赖环境

使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip。

如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar,下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip。

3.2常用据类型使用

Redis中可以存储各种数据类型,不同数据类型有其使用场景,具体各数据类型的使用在操作文档中均能查找(http://redisdoc.com/index.html):

 

 这里以几个常用类型作为介绍。

3.2.1连接

 

3.2.2String

String是最常用的一种数据类型,普通的key/value存储都可以归为此类,value其实不仅是String,也可以是数字:比如想知道什么时候封锁一个IP地址(访问超过几次)。INCRBY命令让这些变得很容易,通过原子递增保持计数。  

 

 

3.2.3List

在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。
从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。相信对于有良好数据结构基础的开发者而言,这一点并不难理解。

 

3.2.4Set

在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。

 

3.2.5Hash

我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

 

4.redis的持久化问题

Redis提供了以下几种持久化方式:

a.RDB持久化:
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。   
b.AOF持久化:

该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

c.无持久化:

我们可以通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了。

d.同时应用AOF和RDB。

5.Redis与GIS的结合:GEO数据类型

Redis3.2版本中增加了对GEO(地理位置)的支持。目前其提供了以下几种操作方式:

a.geoadd:增加某个地理位置的坐标。

b.geopos:获取某个地理位置的坐标。

c.geodist:获取两个地理位置的距离。

d.georadius:根据给定地理位置坐标获取指定范围内的地理位置集合。

e.georadiusbymember:根据给定地理位置获取指定范围内的地理位置集合。

f.geohash:获取某个地理位置的geohash值。

因为其面向的为主流互联网环境,所以其支持的地理坐标系指定为WGS84坐标系,其中的geohash编码算法与我在之前的博客中所提到的一致:WebGIS中GeoHash编码的研究和扩展(http://www.cnblogs.com/naaoveGIS/p/5164187.html)。除了我们自己写代码完成该算法,也有已经开源封装好的源码:https://github.com/kungfoo/geohash-java。

 

                                                                      -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                          如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                                                                                                 

时间: 2024-10-25 23:24:42

Redis环境搭建和代码测试及与GIS结合的GEO数据类型预研的相关文章

Eclipse+Java+OpenCV246环境搭建和代码测试

1.首先下载OpenCV2.4.6,下载的时候,选择windows版的.然后安装 2.其实安装的过程就是解压的过程,并没有什么安装向导之类的,安装完成后,我们最关心的是这个目录:opencv\build\java 如下图所示 注意:opencv-246.jar是需要在opencv的java类库,但是,真正的实现是opencv_java246.dll(X86和X64之分,关键看你的计算机是多少位的)3.建立一个Java项目 4.新建一个Java类,代码如下: [java] view plainco

MySQL InnoDB Cluster环境搭建和简单测试

InnoDB Cluster初印象   记得MySQL Group Replicatioin 刚开始的时候,MySQL界很是轰动,等待了多年,终于有了官方的这个高可用解决方案.你要说还有一些方案补充,比如MySQL Cluster,MySQL Proxy,这些的使用率个人感觉还是不高,也就是经受的考验还不够,原因有很多,就不赘述了.    不久,我和一个MySQL DBA有了下面的一个基本对话.    我: MySQL GR GA之后,里面的自动切换功能确实很赞,能够做到读写分离,原本MHA的方

在openSUSE-11.1 linux环境下Redis的安装和简单测试

  1. 新建虚拟机,安装openSUSE-11.1 2. 安装后,关闭防火墙,这样ssh才可以连接   SuSEfirewall2 stop 3. ssh连接后,开始安装 redis 进入目录: cd /opt/ 按照官方的说明执行如下 $ wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz $ tar xzf redis-2.4.8.tar.gz $ cd redis-2.4.8 $ make   直接安装报如下错误 linux

monkeyrunner环境搭建及实例教程(3)_Android

Monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器. 一.Monkeyrunner简介 1.MOnkeyrunner相对Monkey区别 1)Monkeyrunner工具在工作站上通过API定义的特定命令和事件控制设备或模拟器(可控) 2)精确控制事件之间的事件 3)可以进行:点触屏.拖拽.长按.键盘事件 4)可以智能截图对比和判断 5)回溯出详细具体的BUG路径 2.Monkeyrunner优缺点 1) 能完全模拟人工

java selenium教程环境搭建基于Maven_java

现在Java的大部分项目都是基于Maven,  在Maven项目中使用Selenium2. 非常简单.  首先你需要配置好Maven的环境 可以参考Maven安装以及eclipse配置maven的方法:  http://www.jb51.net/softjc/416034.html 官方的文档 http://docs.seleniumhq.org/download/maven.jsp 新建一个Maven的Project 添加如下到你的POM.XML, 就可以了 <dependency> <

使用RTC构建引擎搭建静态代码检测BEAM的自动测试环境

通过自定义构建引擎和构建定义可以很方便的将各种代码测试或者编译工具集成入 RTC 自动化运行,同时也可以很便利的将测试或者编译结果上传回 RTC,供开发和测试人员查看. IBM Checking Tool for Bugs Errors and Mistakes(本文后面将采用其文字缩写 BEAM)是 IBM 开发的一个静态分析工具,用于查找 C.C + +和 Java 程序中的错误.它直接对代码进行分析,不会尝试执行源代码,也不需要对代码进行编译连接,因此并不需要为代码编写任何测试用例.它是对

分享几款一键搭建php本地测试环境工具

很多朋友平时电脑做服务器都是搭建iis服务器,今天我给大家分享几个一键搭建php本地测试工具!,喜欢做网站论坛的朋友为了使自己的站点能够具有独特的个性和良好的用户体验,总会对自己的站点进行一系列的深度调整,方能充分体现网站特色和唯一性,一般的PHP 本地测试环境[PHP 本地测试.本地服务器.网站制作必备工具] Wordpress 够流行了吧,它是一个用 PHP 编写的强大的博客平台.使用它来架设一个博客平 台相关容易,是新手建站比较方便的工具.但是要真正体会 WordPress(以下简称 WP

手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法

如何编写智能合约(Smart Contract)?(I) 完整视频教程 https://v.qq.com/x/page/h0552ba9k8h.html 学习目标 了解智能合约 简单环境搭建 能够利用solidity编写Hello World合约 合约部署 和合约互动 使用solidity语言撰写智能合约 Ethereum上的智能合约需要使用solidity语言来撰写.虽然还有其他能用来撰写智能合约的语言如Serpent(类Python).lll(类Fortran),但目前看到所有公开的智能合约

B/S架构测试环境搭建_SQLServer篇(Win32系统)

前言:此篇讲解在Win32系统下SQLServer创建数据库和用户(建立测试环境必需),顺带讲下用户和登录名的区别,不对之处,欢迎拍砖. 一.创建数据库: (1)SQLServer安装过程中有一个需要注意的地方,设置各个系统的账户和密码,见下图: 图1 设置所有的账户和密码 其他的没什么需要留意的了,只需按照提示一步步走完就算安装成功了. (2)SQLServer安装完成后,在"开始"--"程序"--"SQLServer"--"SQLS