Redis学习归纳总结--包含redis的所有基础知识点

Redis

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

Redis的安装

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。

java操作redis (Jedis)

配置信息

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();

封装config进行连接

@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();

		}

}

操作string类型的数据

@Testpublic void testString(){
   

​		jedis.set("name"

你可能感兴趣的:(数据库,redis,数据库,java,缓存,后端)