redis是开源的,内存中的数据结构存储系统,他可以用作数据库,缓存和消息中间件
它支持多种类型的数据结构,如字符串,散列,列表,
突然关机可能导致内存内容丢失,所以redis 有磁盘持久化,减少损失
dubbo的数据中心
优点:
清晰易理解
使用方便,通用的sql语言
易于维护,丰富的完整性
缺点:
磁盘I/O是并发的瓶颈
海量数据查询效率低
横向扩展困难,无法简单的通过硬件和服务节点来扩展能力性能和负载能力,当需要对数据库进行升级和扩展时,需要停机维护和数据迁移
多表的关联查询以及复杂的数据分析类型的复杂sql查询,性能欠佳,因为要保证acid,必须要按照三范式设计
数据库:mysql,sql server, oracle, db2
非关系型,分布式,一般不遵循ACID原则的数据存储系统,键值对存储,结构不固定
优点:
根据需要添加字段,不需要多表联查,仅需要id取出对应的value
适用于SNS(社会化服务软件,如facebook,微博)
严格上不是一种数据库,而是一种数据结构化存储方法的集合
缺点:
只适合存储一些较为简单的数据
不适合复杂查询的数据
不适合海量存储数据
数据库:
K-V:redis,memcache
文档:mongodb
搜索:elasticsearch,solr
可扩展型分布式:hbase
yum -y install gcc-c++ autoconf
遇到错误:
make malloc=libc
redis是用c语言编写的
mkdir -p /usr/local/redis
编译安装
make PREFIX==/usr/local/redis install
redis-cli redis自带的客户端
redis-sentinel redis的哨兵
redis-server redis的服务器
./redis-server 启动redis的服务
cp redis.conf /usr/local/redis/bin/ 拷贝文件
vim redis.conf 更改配置文件的信息
./redis-server redis.conf 启动配置文件
./redis-cli 启动
输入ping 返回pong 心跳机制
修改配置文件bind 127.0.0.1 注释起来之后就所有都可以连接
protected-mode no 关闭保护模式
ps -ef|grep redis 查看redis的进程
kill -9 进程号 杀死进程
设置密码:
vim redis.conf
搜索:requirepass foobared 取消注释,把foobared改成root,密码就变成root了
:wq 保存并退出
修改库:
搜索:databases 16 原始的情况下是16个库修改16
连接数据库:./redis-cli -p 6379 -a root
选择数据库:select 1 选择一个数据库
没有的情况下,默认是第一个数据库
使用set类型:set name zhangsan
取值:get name
多set类型设值:mset sex 1 address sh
多set类型取值:mget name sex address
使用hash设值:hset user name zhangsan
使用hash取值:hget user name
多hash类型设值:hmset user age 18 sex 1
获取全部的内容:hgetall user
删除内容信息:hdel user name age
操作list数据
添加list数据:lpush students zhangsan lisi (一直从最左边添加)(左添加)
获取list数据:lrange students 0 2
list的右添加:rpush students wangwu zhaoliu
查询list的长度:llen students
删除list数据:lrem students 1 lisi。删除一条李四的数据
如果有多个重复数据,删除多条: lrem students 2 lisi 从左往右进行删除
添加set集合的数据:sadd letters aaa bbb ccc eee 添加之后是乱序排列的
取出set集合的数据:smembers letters
查询set集合的条数:scard letters
删除set集合的数据:srem letters aaa ccc
查询所有的条数:smember letters
添加socket set数据:zadd score 7 zhangsan 3 lisi 6 wangwu 10 zhaoliu 1 tianqi 会按照前面的数据信息进行排序
查询数据:zrange score 0 4
取出zset数据的条数:zcard score
删除数据:zrem score zhangsan lisi
层级目录设值:set cart:user01:item01 apple
获取层级目录信息:get cart:user01:item01
设置失效时间:set code test ex 10
查询失效时间:ttl code
设置永不失效:set code test 查询失效时间为-1
给已经存在的key设置失效时间:expire code 10
失效之后:get code 返回的是nil
设置:set code test px 10000 xx(xx表示一定code是存在的,否则设置失败;nx表示code不存在才能设置成功)
通用的删除:del address。
1.0的版本默认采用的是jedis
2.x的版本默认采用的是lettuce
如果想用jedis,需要移除lettuce的依赖
< exclusions>
<exclusion>
<groupId>io.letturegroupId>
<artifactId>letture-coreartifactId>
exclusion>
exclusions>
把上面的代码放入springboot启动redis的依赖中
引入redis 的依赖
<dependency>
<groupId>redis.clientsgroupId>
<artifactId>redisartifactId>
dependency>
连接相关信息配置在application.yml之中
//创建jedis对象,建立连接
Jedis jedis = new Jedis(“192.0.0.1”,6379);
//设置认证密码
jedis.auth(“root”);
//指定数据库
jedis.select(1);
//判断是否连接成功
String res = jedis.ping();
//添加一条数据
jedis.set(“name”,“zhangsan”);
//获取一条数据
String name = jedis.get(“name”);
//关闭连接
jedis.close();
//线程池连接
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(),“192.168.10.100”,6379,10000,“root”);
Jedis jedis = new jedisPool().getResource();
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private String timeout;
//最大连接数
@Value("${spring.redis.jedis.pool.max-active}")
private String maxActive;
//最大阻塞时间
@Value("${spring.redis.jedis.pool.max-wait}")
Private String maxWait;
//最大空闲连接
@Value(${
spring.redis.jedis.pool.max-idle})
Private int maxIdle;
//最小空闲连接
@Value("${spring.redis.jedis.pool.min-idle}")
Private String minIdle;
//封装bean,创建工具类
@Bean
public JedisPool getJedisPool(){
JedisPoolConfig jedisPoolConfig = new jedisPoolConfig();
//最大连接数
jedisPoolConfig.setMaxTotal(maxTotal);
//最大连接阻塞时间
jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));
//最大空闲连接
jedisPoolConfig.setMaxIdle(maxIdle);
//最小空闲时间
jedisPoolConfig.setMindle(mindle);
//创建线程池
JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,Integer.valueOf(timeout.substring(0,timeout.length()-2),password);
return jedisPool;
}
// 初始化jedis对象
@Before
public void initCount(){
jedis = jedis.getResource();
}
//释放资源
@After
public void closeCount(){
if(jedis != null){
jedis.close();
}
}
@Test
public void testString(){
jedis.set("name"