1.1 redis 介绍
1.1.1什么是 NoSQL
NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑
战,尤其是大数据应用难题。目前一些主流的 NOSQL 产品:
1.1.2 NoSQL 数据库的分类
1.1.2.1键值(Key-Value)存储数据库
相关产品有 Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB,主要应用于内容缓存,主要用于处理大量数据的高访问负载。
1.2.2.2列存储数据库
相关产品有 Cassandra, HBase, Riak,典型应用于分布式的文件系统
1.2.2.3文档型数据库
相关产品有 CouchDB、MongoDB,典型应用于 Web 应用,可以突破传统关系型数据库的结构限制,存储数据更为灵活
1.2.2.4图形(Graph)数据库
相关数据库有 Neo4J、InfoGrid、Infinite Graph,典型应用于社交网络,存储数据采用图结构利用图结构相关算法。
1.1.2redis
1.1.3 redis 历史发展
2008 年,意大利的一家创业公司 Merzia 推出了一款基于 MySQL 的网站实时统计系统 LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo 便对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于 2009 年开发完成,这个数据库就是 Redis。 不过 Salvatore Sanfilippo并不满足只将 Redis 用于 LLOOGG 这一款产品,而是希望更多的人使用它,于是在同一年 Salvatore Sanfilippo 将 Redis 开源发布,并开始和 Redis 的另一名主要的代码贡献者 Pieter Noordhuis 一起继续着 Redis 的开发,直到今天。
Salvatore Sanfilippo 自己也没有想到,短短的几年时间,Redis 就拥有了庞大的用户群体。Hacker News在2012年发布了一份数据库的使用情况调查,结果显示有近 12%的公司在使用 Redis。国内如新浪微博、街旁网、知乎网,国外如 GitHub、Stack Overflow、Flickr 等都是 Redis 的用户。
VMware 公司从 2010 年开始赞助 Redis 的开发, Salvatore Sanfilippo和 Pieter Noordhuis 也分别在 3 月和 5 月加入 VMware,全职开发 Redis。完全免费
1.1.4redis 的应用场景
Redis 广泛应用于缓存,布式集群架构中的 session 分离,聊天室的在线好友列表,任务队列,应用排行榜,网站访问统计,数据过期处理等场景。
1.2redis安装
1.2.1redis 安装环境
redis 是 C 语言开发,建议在 linux 上运行,本教程使用 Centos6.4 作为安装环境。
安装 redis 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc:yum install gcc-c++。
1.2.2redis 安装
我们使用的 Redis 版本为 redis3.0 版本,首先可以从官网下载 Redis 压缩包http://download.redis.io/releases/redis-3.0.0.tar.gz,然后将下载的 redis 上传到虚拟机的/usr/local 目录下。
将redis的安装包上传到/opt下
解压压缩包:
将解压后的文件夹移动到/usr/local下:
由于redis给的源代码,所有需要先编译再安装:
进入解压后的目录进行编译和安装,编译使用命令 make,安装使用命令:make install。
Redis 安装之后,我们在/usr/local/bin 下可以发现编译之后的 Redis 执行文件。
启动redis: redis-server
发现命令窗口被占用,重新开启一个连接连接redis
在新的窗口中使用redis-cli 连接服务器
3.2.3redis 的启动
3.2.3.1 前端模式启动
直接运行 redis-server 将以前端模式启动,前端模式启动的缺点是占用终端,同时 ssh 命令窗口关闭则 redis-server 程序结束,所以不推荐使用此方法。
3.2.3.2后端模式启动
修改 redis.conf 配置文件, 将 daemonize 设置 yes 以后即可以后端模式来启动 Redis。
在/usr/local下创建文件夹redis,并且将默认的/usr/local/redis-3.0.7/ 下的redis.conf拷贝到/usr/local/redis下:
修改拷贝出来的文件:
保存退出。
再次启动redis,并且指定配置文件。
3.2.3.3启动多个 redis 进程
在一台机器上启动多个redis进程,不能使用同一个端口,所以需要修改端口启动:
拷贝原有的redis.conf文件
修改redis-7001.conf中的端口为7001
再次启动redis服务,指定配置文件为redis-7001.conf
使用客户端连接redis
Redis-cli 默认连接的是 本机的 6379端口的redis。
Redis –cli [-h ] [-p]
-h指定定服务器地址,如果是本机可以省略不写
-p 指定端口号,如果是6379 可以省略不写。
连接7001端口下的redis服务
3.3 关闭redis服务
停止redis服务,如果是前端启动模式,就直接关闭窗口服务就自动关闭了。如果是后端启动模式,可以直接杀死redis服务进程,也可以通过客户端发送shutdown命令关闭服务。
直接杀死进程关闭6379服务:
在客户端发送命令shutdown关闭7001端口上的redis服务
3.4Reids基本命令
3.4.1 ping 命令
Redis 提供了 PING 命令来测试客户端与 Redis 的连接是否正常,如果连接正常会收到回复 PONG。
3.4.2 set/get 命令
Redis是以key – value的形式存储数据的, 没有表结构。类似于map。
我们可以通过 set key value添加一个键值对到数据库中。可通过get key 获取一个指定key的value。
3.4.3 del 命令
del 命令用来删除指定 key 的内容。
语法 : del key
3.4.4 keys*命令
Keys * 命令类似于mysql中的select * 但是keys * 仅仅是获取所有的key。如果数据库中没有任何key
如果有数据就返回所有的key
3.4.5flushdb 命令
flushdb 命令用来清空当前数据库中的所有数据
3.5Redis 多数据库
一个 Redis 数据库可以包括多个数据库,客户端可以指定连接某个 redis 实例的哪个数据库,就好比一个 mysql 中创建多个数据库,客户端连接时指定连接哪个数据库。一个 redis 实例默认提供 16 个数据库,这由启动的配置文件中指定,下标从 0 到 15,客户端默认连接第 0 号数据库,也可以通过 select 选择连接哪个数据库,不同数据库中的数据不能共享
可以通过修改配置文件修改数据库的数量。
客户端可以通过select index连接对应的数据库。默认连接的是0号数据库。
索引号为0~15 当超过15时:
需要注意的问题是,如果我们使用 flushall 命令清空某一个库中的数据时,其他库中的数据也会被清空,因此,在我们不同的业务访问 Redis 服务器时应该选择不同的 Redis 服务器,而不是同一个服务器内部的不同的数据库。、
3.6 Jedis 的使用
3.6.1 Jedis 介绍
Redis 不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如 java、C、C#、C++、php、Node.js、Go 等
在官方网站里列一些 Java 的客户端,有 Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用 Jedis 和 Redisson。 在企业中用的最多的就是 Jedis,下面我们就重点学习下 Jedis。
3.6.2通过 jedis 连接 redis
3.6.2.1 添加 jar 包
3.6.2.2单实例连接 Redis
public class JedisTest { @Test public void testJedisSet() { //创建一个jedis对象 //参数1:服务器的IP地址。 参数2:redis服务的端口号 //服务器必须开发对应的端口号,或者关闭防火墙 Jedis jedis = new Jedis("192.168.30.150", 6379); //使用set方法添加数据 jedis.set("k100", "jedisTest"); } }
|
@Test public void testJedisGet() { // 创建一个jedis对象 Jedis jedis = new Jedis("192.168.30.150", 6379); //使用get方法获取数据 String value = jedis.get("k1"); System.out.println(value); } |
3.6.2.3使用连接池连接 Redis
@Test public void testJedisPool() { //创建一个jedisPool对象 JedisPool pool = new JedisPool("192.168.30.150", 6379); //从池中获取一个jedis对象 Jedis jedis = pool.getResource(); //接下来的操作自己脑补 } |
Tips:使用jedis是方法和redis的命令是一致的。 其实redis有什么命令,jedis就有什么方法。 比如:del,keys *