redis基础学习笔记
redis
1.概念
- reids高性能非关系型数据库(NOSQL---->Not Only SQL)
- 关系型数据库与非关系型数据库的对比:
- 关系型数据库:
- 数据之间有耦合/关系
- 数据存储在硬盘中---->操作关系型数据库消耗资源大
- 优点:支持复杂查询及多表查询,事务支持使其安全性高
- 非关系型数据库:
- 数据存储形式为键值对,文档,图片
- 数据之间没有耦合
- 数据存储在内存中----->对于并不经常发生变化的数据使用缓存思想
- 缓存思想:与缓存交互而不是与数据库直接交互
- 缺点:不提供数据库对事物的处理
- 关系型数据库:
2.下载安装
3.命令操作
- redis的数据格式:键值对,key都为字符串,value有5种不同的数据格式:
- 字符串:String
- 哈希类型 hash:map格式---->键值对
- 列表类型 list:linkedlist格式
- 集合类型 set ---->不允许重复
- 有序集合类型 sortedset---->自动进行排序
- 字符串形式:
- 存储:set key value
- 获取:get key
- 删除:del key
- 哈希类型:
- 存储:hset key (field value)
- 获取:hget key field---->获取所有的值:hgetall key
- 删除:hdel
- 列表类型(字符串列表可模拟队列操作):
- 可选择从两端加入数据---->lpush key value / rpush key value
- 获取:lrange key start end:范围获取
- 删除并返回:lpop key / rpop key
- 集合类型(不允许重复不保证顺序):
- 存储:sadd key value
- 获取集合中所有的元素:smembers key
- 删除集合中的某个元素:srem key value
- 有序集合(不允许有重复元素且有序,每个成员关联着一个double评分):
- 存储:zadd key score value
- 获取:zrange key start end
- 删除:zrem key value
- 通用命令:
- 查询所有的键:keys *
- 查询键对应的数据类型:type key
- 删除指定的键值对:del key
4.持久化操作
- redis是一个内存数据库,当redis服务器重启,数据将会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
- redis持久化机制(通过操作配置文件更改):
- RDB默认方式,间隔一定的时间,检测key的变化情况,然后持久化数据
- save 900 1;save 300 10;save 60 10000---->每隔900秒并且有一条数据发生改变就持久化一次
- 重启redis服务器并指定配置文件的名称
- redis-server.exe redis.windows.conf
- AOF:日志记录的方式,记录每一条命令的操作,每次命令操作都持久化数据
- 操作配置文件:appendonly no---->appendonly yes
- appendfsync always:每次操作都进行持久化
- appendfsync evertsec:每秒钟
- appendfsync no:不进行持久化
- 操作配置文件:appendonly no---->appendonly yes
- RDB默认方式,间隔一定的时间,检测key的变化情况,然后持久化数据
5.使用java客户端操作redis
-
Jedis:类似于JDBC,java操作redis数据库的工具
-
使用:
public void test01(){ //获取链接 Jedis jedis = new Jedis("localhost", 6379); //使用Jedis String set = jedis.set("username", "zhangsan"); System.out.println(set); String username = jedis.get("username"); System.out.println(username); //关闭连接 jedis.close(); }
-
Jedis连接池:JedisPool
//使用默认配置 public void test02(){ //创建连接池 JedisPool jedisPool = new JedisPool(); //创建redis连接 Jedis jedis = jedisPool.getResource(); //使用 jedis.zadd("grade",100,"zhangsan"); //归还连接 jedis.close(); }
public void test03(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); //最大连接池对象数 jedisPoolConfig.setMaxTotal(50); //最大保持idle(空闲)状态对象数 jedisPoolConfig.setMaxIdle(10); JedisPool jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379); Jedis jedis = jedisPool.getResource(); jedis.zadd("grade",100,"zhangsan"); jedis.close(); } /* #最大活动对象数 redis.pool.maxTotal=1000 #最大能够保持idel状态的对象数 redis.pool.maxIdle=100 #最小能够保持idle状态的对象数 redis.pool.minIdle=50 #当池内没有返回对象时,最大等待时间 redis.pool.maxWaitMillis=10000 #当调用borrow Object方法时,是否进行有效性检查 redis.pool.testOnBorrow=true #当调用return Object方法时,是否进行有效性检查 redis.pool.testOnReturn=true #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1. redis.pool.timeBetweenEvictionRunsMillis=30000 #向调用者输出“链接”对象时,是否检测它的空闲超时; redis.pool.testWhileIdle=true # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3. redis.pool.numTestsPerEvictionRun=50 #redis服务器的IP redis.ip=xxxxxx #redis服务器的Port redis1.port=6379 */