Redis简介-安装-Spring-SpringBoot集成教程
来源:互联网 发布:淘宝子账号有什么用 编辑:程序博客网 时间:2024/06/06 14:08
一、 什么是NoSQL
NoSql是为了解决高并发、高可扩展、高可用以及高写入而产生的数据库解决方案。
NoSql就是Not Only sql。Nosql是非关系型数据库,它是关系型数据库的良好补充,而不能替代关系型数据库。
二、 Nosql数据库分类
键值(Key-Value)存储数据库
- 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
- 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
- 数据模型: 一系列键值对
- 优势: 快速查询
- 劣势: 存储的数据缺少结构化
列存储数据库
- 相关产品:Cassandra, HBase, Riak
- 典型应用:分布式的文件系统
- 数据模型:以列簇式存储,将同一列数据存在一起
- 优势:查找速度快,可扩展性强,更容易进行分布式扩展
- 劣势:功能相对局限
文档型数据库
- 相关产品:CouchDB、MongoDB
- 典型应用:Web应用(与Key-Value类似,Value是结构化的)
- 数据模型: 一系列键值对
- 优势:数据结构要求不严格
- 劣势: 查询性能不高,而且缺乏统一的查询语法
图形(Graph)数据库
- 相关数据库:Neo4J、InfoGrid、Infinite Graph
- 典型应用:社交网络
- 数据模型:图结构
- 优势:利用图结构相关算法。
- 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
三、 什么是redis
Redis是用C语言开发的高性能的键值对存储的非关系数据库。Redis存储的数据类型有以下几种:字符(String)、散列(Hash)、列表(List)、集合(Set)、有序集合(ZSet)
四、历史发展
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人 Salvatore Sanfilippo便对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。 不过Salvatore Sanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年Salvatore Sanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者Pieter Noordhuis一起继续着Redis的开发,直到今天。
SalvatoreSanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。HackerNews在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。国内如新浪微博、街旁网、知乎网,国外如GitHub、Stack Overflow、Flickr等都是Redis的用户。
VMware公司从2010年开始赞助Redis的开发, Salvatore Sanfilippo和Pieter Noordhuis也分别在3月和5月加入VMware,全职开发Redis。
五、redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
- 分布式集群架构中的session分离。
- 聊天室的在线好友列表。
- 任务队列。(秒杀、抢购、12306等等)
- 应用排行榜。
- 网站访问统计。
- 数据过期处理(可以精确到毫秒)
六、redis安装与启动
——-安装
- 进入Linux控制终端,下载Redis安装包
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
- 安装C语言环境(已经安装->跳过)
yum install gcc-c++
- 解压Redis安装包
tar -zxf redis-3.0.6.tar.gz
- 进入解压目录并编译Redis
cd redis-3.0.6make
- 安装Redis
make install PREFIX=/usr/local/redis
如果出现以下类似信息则说明安装正常
make[1]: Entering directory `/root/redis-3.0.6/src'Hint: It's a good idea to run 'make test' ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL installmake[1]: Leaving directory `/root/redis-3.0.6/src
——启动
进入到安装目录的bin目录
cd /usr/local/redis/bin
- 前台启动
比较少用,一旦启动redis的客户端关闭,则redis也关闭。
./redis-server
后台启动
- 将redis.conf拷贝到bin目录下(redis.conf位于redis解压目录下)
cp -r /root/redis-3.0.6/redis.conf /usr/local/redis/bin/
- 修改redis.conf配置
vim redis.conf
将daemonize 改为yes (第42行)
- 启动redis
./redis-server redis.conf
七、客户端连接
redis本机自带客户端连接
./redis-cli -h 127.0.0.1 -p 6379
-h:指定主机IP
-p:指定主机端口
./redis-cli
默认主机IP是127.0.0.1 默认端口 6379
使用图形软件连接
- 下载软件
下载GitHub网址
https://github.com/uglide/RedisDesktopManager/releases/
mac下载地址
https://github.com/uglide/RedisDesktopManager/releases/download/0.9.0-alpha4/redis-desktop-manager-0.9.0.51.dmg
ps:在我的mac上不能用,可能因为用了最新的系统,找了另外一个软件:https://github.com/caoxinyu/RedisClient/tree/OSX,下载下来用以下命令启动。
nohup java -XstartOnFirstThread -jar redisclient-OSX.jar >/dev/null 2>&1 &
可以将这段保存为脚本start.sh执行,(先更改权限chmod 777 start.sh
),然后命令行的当前目录执行./satrt.sh
windows下载网址
https://github.com/uglide/RedisDesktopManager/releases/download/0.9.0-alpha4/redis-desktop-manager-0.9.0.559.exe
安装就不用多说了,双击即可
现在没有设置密码,直接add server,填写ip和端口即可。
八、Spring集成
jar文件
##maven<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency>##gradlecompile group: 'redis.clients', name: 'jedis', version: '2.9.0'
配置文件
<!-- 连接池配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最大连接数 --> <property name="maxTotal" value="30" /> <!-- 最大空闲连接数 --> <property name="maxIdle" value="10" /> <!-- 每次释放连接的最大数目 --> <property name="numTestsPerEvictionRun" value="1024" /> <!-- 释放连接的扫描间隔(毫秒) --> <property name="timeBetweenEvictionRunsMillis" value="30000" /> <!-- 连接最小空闲时间 --> <property name="minEvictableIdleTimeMillis" value="1800000" /> <!-- 连接空闲多久后释放, 当空闲时间>该值 且 空闲连接>最大空闲连接数 时直接释放 --> <property name="softMinEvictableIdleTimeMillis" value="10000" /> <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 --> <property name="maxWaitMillis" value="1500" /> <!-- 在获取连接的时候检查有效性, 默认false --> <property name="testOnBorrow" value="false" /> <!-- 在空闲时检查有效性, 默认false --> <property name="testWhileIdle" value="true" /> <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true --> <property name="blockWhenExhausted" value="false" /> </bean> <!-- redis单机 通过连接池 --> <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close"> <constructor-arg name="poolConfig" ref="jedisPoolConfig" /> <constructor-arg name="host" value="127.0.0.1" /> <constructor-arg name="port" value="6379" /> </bean>
测试代码
@Test public void testJedisPool() { JedisPool pool = (JedisPool) applicationContext.getBean("jedisPool"); Jedis jedis = null; try { jedis = pool.getResource(); jedis.set("name", "lisi"); String name = jedis.get("name"); System.out.println(name); } catch (Exception ex) { ex.printStackTrace(); } finally { if (jedis != null) { // 关闭连接 jedis.close(); } } }
九、设置redis密码
编辑/usr/local/redis/bin/redis.conf的396行。(小提示:命令行模式下396gg
就跳转到396行了),将注释打开,更改为自己的密码。命令行模式下,输入:wq
保存退出。
requirepass 123456
重启
首先查询到redis的pid后,kill掉,然后重启
[root@localhost bin]# ps -ef|grep redisroot 20940 1 0 12:12 ? 00:00:18 ./redis-server *:6379 [root@localhost bin]# kill 20940[root@localhost bin]# ./redis-server redis.conf
十、SpringBoot集成
springboot中只需要加入依赖,就会帮我们自动配置好redisTemplate,stringredisTemplate,使用十分方便。除了string,list,set,zset,hash,还支持存入对象。(对象必需实现Serializable)
- 加入起步Starter
gradle
//rediscompile('org.springframework.boot:spring-boot-starter-data-redis')
maven的方式百度下就有,看到这里的人应该有能力查到了。
- 对redis进行一些配置(没配置密码)
application.properties
#--------------------------redis----------------------------# 使用的数据库,共16个0-15spring.redis.database=0#连接地址spring.redis.host=172.16.160.129#密码spring.redis.password=123456#连接端口spring.redis.port=6379#最大连接数spring.redis.pool.max-active=8#是否为安全连接(https,ssl)spring.redis.ssl=false#超时spring.redis.timeout=1000
- 使用示例
UserTest对象
import lombok.Data;import java.io.Serializable;@Data//使用了lombokpublic class UserTest implements Serializable { private String name; private String address; private Integer age;}
import com.kingboy.CommonApplication;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.test.context.junit4.SpringRunner;import javax.annotation.Resource;import java.util.Set;/** * @Author kingboy * @Date 2017/7/19 下午5:09 * @Description RedisTest is used to redisTest */@RunWith(SpringRunner.class)@SpringBootTest(classes = CommonApplication.class)public class RedisTest { @Resource StringRedisTemplate stringRedisTemplate; @Resource RedisTemplate redisTemplate; /** * 测试StringRedisTemplate */ @Test public void StringRedisTemplateTest() { //String stringRedisTemplate.opsForValue().set("king","hello world!"); String king = stringRedisTemplate.opsForValue().get("king"); System.out.println("String获取的值:" + king); //set stringRedisTemplate.opsForSet().add("kingset", "1", "2", "3"); Set<String> kingset = stringRedisTemplate.opsForSet().members("kingset"); System.out.println("Set获取的值:" + kingset); //zset,hash,list省略 } /** * 测试redisTemplate */ @Test public void redisTemplateTest() { redisTemplate.opsForList().leftPush("listtest", "param1"); Object index = redisTemplate.opsForList().index("listtest", 0); System.out.println("list" + index); //zset,hash,string,set省略 } /** * 测试存入对象 * 存入的对象需要实现Serializable接口 */ @Test public void saveObjectTest() { //创建 UserTest userTest = new UserTest(); userTest.setName("小金2"); userTest.setAge(12); userTest.setAddress("BeiJing"); //存 redisTemplate.opsForHash().put("user", userTest.hashCode(), userTest); //取 UserTest user = (UserTest) redisTemplate.opsForHash().get("user", userTest.hashCode()); System.out.println(user); }}
十一、项目
自己在github新建了springboot的项目,供个人研究,项目地址:
https://github.com/KingBoyWorld/aurora.git,
项目中演示了actuator的使用(actuator_feature分支),redis的集成(redis_feature分支)等功能,感兴趣可以下载看看,如有错误,欢迎指正。
十二、关于Redis使用
主要是String,Set,ZSet,List,Hash的使用,以及过期时间、本地序列存储等,网止很多教程,以后有空自己再整理一份。
记录完了,有句话不知当讲不当讲………………
- Redis简介-安装-Spring-SpringBoot集成教程
- redis的安装+spring+springboot
- SpringBoot非官方教程 | 第十三篇:springboot集成spring cache
- SpringBoot非官方教程 | 第十三篇:springboot集成spring cache
- SpringBoot非官方教程 | 第十三篇:springboot集成spring cache
- SpringBoot非官方教程 | 第十三篇:springboot集成spring cache
- Redis安装+spring注解集成Redis
- SpringBoot -- 集成Redis/CacheManager
- SpringBoot -- 集成Redis/CacheManager
- springboot集成redis
- springboot集成Redis
- springboot 集成redis 哨兵
- springboot集成Redis
- SpringBoot集成Redis
- springboot集成redis详解
- 关于SpringBoot 集成 Redis
- SpringBoot集成Redis
- springboot集成redis
- python 安装
- 第三章 内核对象
- 大规模模型绘制的优化思路
- fork系统调用过程
- Unity3D学习记录——API工具类2
- Redis简介-安装-Spring-SpringBoot集成教程
- Allegro导出PCB封装文件和焊盘文件
- Intellij Idea-统一显示SpringMVC请求和处理方法映射列表
- 如何选择合适的UI培训学校
- [Ubuntu 14.04] Samba创建文件出现Connection Abort 或者Window资源管理器访问samba崩溃问题
- spring-mvc4配置和使用
- hihoCoder #1319 : 区域周长
- eclipse下创建maven spring MVC 项目全步骤
- 数据挖掘算法笔记:knn算法