redis学习笔记Word格式文档下载.docx
- 文档编号:20975350
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:80
- 大小:1.84MB
redis学习笔记Word格式文档下载.docx
《redis学习笔记Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《redis学习笔记Word格式文档下载.docx(80页珍藏版)》请在冰豆网上搜索。
存储的数据缺少结构化
⏹列存储数据库
Cassandra,HBase,Riak
分布式的文件系统
以列簇式存储,将同一列数据存在一起
查找速度快,可扩展性强,更容易进行分布式扩展
劣势:
功能相对局限
⏹文档型数据库
CouchDB、MongoDB
Web应用(与Key-Value类似,Value是结构化的)
优势:
数据结构要求不严格
查询性能不高,而且缺乏统一的查询语法
⏹图形(Graph)数据库
相关数据库:
Neo4J、InfoGrid、InfiniteGraph
社交网络
图结构
利用图结构相关算法。
需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
2.2redis历史发展
2008年,意大利的一家创业公司Merzia推出了一款基于MySQL的网站实时统计系统LLOOGG,然而没过多久该公司的创始人SalvatoreSanfilippo便对MySQL的性能感到失望,于是他决定亲自为LLOOGG量身定做一个数据库,并于2009年开发完成,这个数据库就是Redis。
不过SalvatoreSanfilippo并不满足只将Redis用于LLOOGG这一款产品,而是希望更多的人使用它,于是在同一年SalvatoreSanfilippo将Redis开源发布,并开始和Redis的另一名主要的代码贡献者PieterNoordhuis一起继续着Redis的开发,直到今天。
SalvatoreSanfilippo自己也没有想到,短短的几年时间,Redis就拥有了庞大的用户群体。
HackerNews在2012年发布了一份数据库的使用情况调查,结果显示有近12%的公司在使用Redis。
国内如新浪微博、街旁网、知乎网,国外如GitHub、StackOverflow、Flickr等都是Redis的用户。
VMware公司从2010年开始赞助Redis的开发,SalvatoreSanfilippo和PieterNoordhuis也分别在3月和5月加入VMware,全职开发Redis。
2.3什么是redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。
它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如
下:
字符串类型
散列类型
列表类型
集合类型
有序集合类型。
2.4redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。
(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。
(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
3测试环境
redis需要安装在linux服务器上运行测试,本教程使用linux虚拟机及ssh客户端进行功能测试。
3.1虚拟机
创建Centos6.4虚拟机作为linux服务器。
虚拟机ip:
192.168.101.3
3.2ssh客户端
在开发环境(windows)安装ssh客户端,本教程使用SecureCRT作为ssh客户端连接虚拟机。
4安装运行redis
4.1redis安装环境
redis是C语言开发,建议在linux上运行,本教程使用Centos6.4作为安装环境。
安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:
yuminstallgcc-c++
4.2redis安装
⏹版本说明
本教程使用redis3.0版本。
3.0版本主要增加了redis集群功能。
⏹源码下载
从官网下载
http:
//download.redis.io/releases/redis-3.0.0.tar.gz
将redis-3.0.0.tar.gz拷贝到/usr/local下
⏹解压源码
tar-zxvfredis-3.0.0.tar.gz
⏹进入解压后的目录进行编译
cd/usr/local/redis-3.0.0
make
⏹安装到指定目录,如/usr/local/redis
cd/usr/local/redis-3.0.0
makePREFIX=/usr/local/redisinstall
⏹redis.conf
redis.conf是redis的配置文件,redis.conf在redis源码目录。
注意修改port作为redis进程的端口,port默认6379。
⏹拷贝配置文件到安装目录下
进入源码目录,里面有一份配置文件redis.conf,然后将其拷贝到安装路径下
cd/usr/local/redis
mkdirconf
cp/usr/local/redis-3.0.0/redis.conf/usr/local/redis/bin
⏹安装目录bin下的文件列表
redis3.0新增的redis-sentinel是redis集群管理工具可实现高可用。
配置文件目录:
4.3redis启动
4.3.1前端模式启动
直接运行bin/redis-server将以前端模式启动,前端模式启动的缺点是ssh命令窗口关闭则redis-server程序结束,不推荐使用此方法。
如下图:
4.3.2后端模式启动
修改redis.conf配置文件,daemonizeyes以后端模式启动。
执行如下命令启动redis:
cd/usr/local/redis
./bin/redis-server./redis.conf
redis默认使用6379端口。
也可更改redis.conf文件,修改端口号:
4.3.3启动多个redis进程
方法1:
启动时指定端口可在一台服务器启动多个redis进程。
cd/usr/local/redis/bin
./redis-server./redis.conf--port6380
方法2(推荐此方法):
创建多个redis目录,以端口号命名,比如:
创建6379、6380两个目录,将redis的安装文件bin和conf拷贝至这两个目录。
修改6379目录下的redis.conf设置端口号为6379
修改6380目录下的redis.conf设置端口号为6380
启动6379和6380目录下的redis-server程序:
cd6379
./redis-server./redis.conf
cd6380
查询当前redis的进程:
4.4redis停止
强行终止Redis进程可能会导致redis持久化数据丢失。
正确停止Redis的方式应该是向Redis发送SHUTDOWN命令,方法为:
./bin/redis-clishutdown
4.5redis客户端
在redis的安装目录中有redis的客户端,即redis-cli(RedisCommandLineInterface),它是Redis自带的基于命令行的Redis客户端。
4.5.1连接redis服务端
执行bin/redis-cli连接redis服务端:
从上图得知redis-cli默认连接本机的redis,本机的redis没有启动则报上图中的错误。
指定连接redis服务的ip和端口:
4.5.2向redis服务端发送命令
redis-cli连上redis服务后,可以在命令行发送命令。
⏹ping
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG
⏹set/get
使用set和get可以向redis设置数据、获取数据。
⏹del
删除指定key的内容。
例如:
delname
⏹Keys*
查看当前库中所有的key值
4.6redis多数据库
4.6.1redis实例
一个redis进程就是一个redis实例,一台服务器可以同时有多个redis实例,不同的redis实例提供不同的服务端口对外提供服务,每个redis实例之间互相影响。
每个redis实例都包括自己的数据库,数据库中可以存储自己的数据。
4.6.2多数据库测试
一个Redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就好比一个mysql中创建多个数据库,客户端连接时指定连接哪个数据库。
一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库,如下连接1号库:
在1号库中查询上节设置的数据,结果查询不到:
重新选择第0号数据库,查询数据:
如果选择一个不存在数据库则会报错:
注意:
redis不支持修改数据库的名称,只能通过select0、select1...选择数据库。
4.6.3注意问题
在0号数据库存储数据,在1号数据库执行清空数据命令却把0号数据库的数据给清空了:
建议:
不同的应用系统要使用不同的redis实例而不是使用同一个redis实例下的不同数据库。
5jedis
5.1jedis介绍
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。
在企业中用的最多的就是Jedis,下面我们就重点学习下Jedis。
Jedis同样也是托管在github上,地址:
5.2通过jedis连接redis单机
5.2.1jar包
pom坐标:
<
dependency>
<
groupId>
redis.clients<
/groupId>
artifactId>
jedis<
/artifactId>
version>
2.7.0<
/version>
/dependency>
jar包如下:
5.2.2单实例连接
通过创建单实例jedis对象连接redis服务,如下代码:
//单实例连接redis
@Test
publicvoidtestJedisSingle(){
Jedisjedis=newJedis("
192.168.101.3"
6379);
jedis.set("
name"
"
bar"
);
Stringname=jedis.get("
System.out.println(name);
jedis.close();
}
5.2.2.1连接超时解决
由于linux防火墙默认开启,redis的服务端口6379并不在开放规则之内,所有需要将此端口开放访问或者关闭防火墙。
关闭防火墙命令:
seviceiptablesstop
如果是修改防火墙规则,可以修改:
/etc/sysconfig/iptables文件
5.2.3使用连接池连接
通过单实例连接redis不能对redis连接进行共享,可以使用连接池对redis连接进行共享,提高资源利用率,使用jedisPool连接redis服务,如下代码:
publicvoidpool(){
JedisPoolConfigconfig=newJedisPoolConfig();
//最大连接数
config.setMaxTotal(30);
//最大连接空闲数
config.setMaxIdle
(2);
JedisPoolpool=newJedisPool(config,"
Jedisjedis=null;
try{
jedis=pool.getResource();
jedis.set("
lisi"
Stringname=jedis.get("
System.out.println(name);
}catch(Exceptionex){
ex.printStackTrace();
}finally{
if(jedis!
=null){
//关闭连接
jedis.close();
}
}
详细的连接池配置参数参考下节jedis和spring整合中applicationContext.xml的配置内容。
5.2.4jedis与spring整合
配置spring配置文件applicationContext.xml
<
?
xmlversion="
1.0"
encoding="
UTF-8"
>
beansxmlns="
http:
//www.springframework.org/schema/beans"
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
mvc="
//www.springframework.org/schema/mvc"
context="
//www.springframework.org/schema/context"
aop="
//www.springframework.org/schema/aop"
tx="
//www.springframework.org/schema/tx"
xsi:
schemaLocation="
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans-3.2.xsd
//www.springframework.org/schema/mvc
//www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
//www.springframework.org/schema/context
//www.springframework.org/schema/context/spring-context-3.2.xsd
//www.springframework.org/schema/aop
//www.springframework.org/schema/aop/spring-aop-3.2.xsd
//www.springframework.org/schema/tx
//www.springframework.org/schema/tx/spring-tx-3.2.xsd"
!
--连接池配置-->
beanid="
jedisPoolConfig"
class="
redis.clients.jedis.JedisPoolConfig"
--最大连接数-->
propertyname="
maxTotal"
value="
30"
/>
--最大空闲连接数-->
maxIdle"
10"
--每次释放连接的最大数目-->
numTestsPerEvictionRun"
1024"
--释放连接的扫描间隔(毫秒)-->
timeBetweenEvictionRunsMillis"
30000"
--连接最小空闲时间-->
minEvictableIdleTimeMillis"
1800000"
--连接空闲多久后释放,当空闲时间>
该值且空闲连接>
最大空闲连接数时直接释放-->
softMinEvictableIdleTimeMillis"
10000"
--获取连接时的最大等待毫秒数,小于零:
阻塞不确定的时间,默认-1-->
maxWaitMillis"
1500"
--在获取连接的时候检查有效性,默认false-->
testOnBorrow"
true"
--在空闲时检查有效性,默认false-->
testWhileIdle"
--连接耗尽时是否阻塞,false报异常,ture阻塞直到超时,默认true-->
blockWhenExhausted"
false"
/bean>
--redis单机通过连接池-->
jedisPool"
redis.clients.jedis.JedisPool"
destroy-method="
close"
constructor-argname="
poolConfig"
ref="
/>
host"
192.168.25.145"
port"
6379"
测试代码:
privateApplicationContextapplicationContext;
@Before
publicvoidinit(){
applicationContext=newClassPathXmlApplicationContext(
"
classpath:
applicationContext.xml"
publicvoidtestJedisPool(){
JedisPoolpool=(JedisPool)applicationContext.getBean("
try{
6数据类型--string
6.1redisstring介绍
redis中没有使用C语言的字符串表示,而是自定义一个数据结构叫SDS(simpledynamicstring)即简单动态字符串。
打开下载的redis源码包,找到src下的sds.h文件查看sds源码:
structsdshdr{
//字符串长度
unsignedintlen;
//buf数组中未使用的字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- redis 学习 笔记