Redis简介-安装-Spring-SpringBoot集成教程

来源:互联网 发布:淘宝子账号有什么用 编辑:程序博客网 时间:2024/06/06 14:08

一、 什么是NoSQL

NoSql是为了解决高并发、高可扩展、高可用以及高写入而产生的数据库解决方案。

NoSql就是Not Only sql。Nosql是非关系型数据库,它是关系型数据库的良好补充,而不能替代关系型数据库。

二、 Nosql数据库分类

  1. 键值(Key-Value)存储数据库

    • 相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
    • 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
    • 数据模型: 一系列键值对
    • 优势: 快速查询
    • 劣势: 存储的数据缺少结构化
  2. 列存储数据库

    • 相关产品:Cassandra, HBase, Riak
    • 典型应用:分布式的文件系统
    • 数据模型:以列簇式存储,将同一列数据存在一起
    • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
    • 劣势:功能相对局限
  3. 文档型数据库

    • 相关产品:CouchDB、MongoDB
    • 典型应用:Web应用(与Key-Value类似,Value是结构化的)
    • 数据模型: 一系列键值对
    • 优势:数据结构要求不严格
    • 劣势: 查询性能不高,而且缺乏统一的查询语法
  4. 图形(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安装与启动

 ——-安装

  1. 进入Linux控制终端,下载Redis安装包
wget http://download.redis.io/releases/redis-3.0.6.tar.gz
  1. 安装C语言环境(已经安装->跳过)
yum install gcc-c++
  1. 解压Redis安装包
tar -zxf redis-3.0.6.tar.gz
  1. 进入解压目录并编译Redis
cd redis-3.0.6make
  1. 安装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

使用图形软件连接

  1. 下载软件

下载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
  1. 安装就不用多说了,双击即可

  2. 现在没有设置密码,直接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)

  1. 加入起步Starter

gradle

//rediscompile('org.springframework.boot:spring-boot-starter-data-redis')

maven的方式百度下就有,看到这里的人应该有能力查到了。

  1. 对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
  1. 使用示例

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的使用,以及过期时间、本地序列存储等,网止很多教程,以后有空自己再整理一份。

记录完了,有句话不知当讲不当讲………………

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 内增高太高怎么办 长钉球鞋铲不下怎么办 足球鞋买大了怎么办? 军靴穿着磨脚怎么办 军靴磨大脚趾怎么办 想开服装店没经验怎么办 我鼻子大怎么办啊 副局长不听局长的话怎么办 边防改制部局怎么办 毛中老师打人怎么办 老婆是个泼妇怎么办 一年级孩子学习不好怎么办 生活作息不规律怎么办 作息时间不规律怎么办 能醒不想起床怎么办 不想起床怎么办 神回复 孩子不起床上学怎么办 孕晚期起床困难怎么办 腰间盘疼痛起床困难怎么办 小学生做作业拖拉怎么办 被手机贷起诉怎么办 大人睡颠倒了怎么办 熬夜长斑了怎么办 ps遇到文件尾怎么办 pdf用ps打不开怎么办 ps安装不上怎么办 工作原因经常熬夜怎么办 熬夜皮肤暗黄怎么办 经常熬夜睡眠不好怎么办 经常熬夜皮肤不好怎么办 皮肤熬夜变暗黄怎么办 晚上上夜班白天睡不着怎么办 熬夜肾虚怎么办才能好 经常熬夜口气重怎么办 晚上睡不着白天起不来怎么办 晚上熬夜白天睡不着怎么办 在外打工孩子上学怎么办 婴儿脸干燥发红怎么办 宝宝脸上红点点怎么办 药流出血量少怎么办 药流喝药第一天发烧了怎么办