文章目录
Redis 的运用
1 Redis概述;(了解)
1.1Sql:操作数据库(关系型的)的标准语言
1.1.1关系数据库(rdbms):表与表之间有相应的关系(外键关联)–用于中小型的项目,数据量不大.关系型数据库:以关系(由行和列组成的二维表)模型为核心数据库.
1.2 Nosql:操作非关系型的数据库,主要用于大型的数据量和高并发.
2.1.2 键值对 key-value:Redis (缓存的数据库,处理大数据和日志系统)
列: colum store:Hbase. (分布式的文件系统)
文档: docment:mangoDb.
推荐系统:通过选择,进行推荐.
面试题:redis 和memcache—做缓存的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FANmuqfG-1576752704277)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1576719342742.png)]
1.3 redis的使用场景
- 最多的就是缓存-redis
2)计时器的运用–(微博热点)
3)实时攻防系统–(银行网站登录)
4)有效期的运用 --秒杀 红包过期
5)自动去重
6)列队
7)消息订阅系统
2 安装Redis;(掌握)
2.1 安装(解压 傻瓜式安装)
3 Redis cli操作Redis;(掌握)
3.1 字符串操作的操作
set key value //存值 set name xxx
get key //取值
mset 批量存值
mget 批量取值
incr 自增
decr 自减
incrBy 自增多少
decrBy //自减到多少
3.2 key 的操作
keys * //获取所有Key列表
del key s删除
expire key xx //设置key 的过期的时间(xx秒过期)
ttl key //查看过期时间
flushall 删除所有数据库(0-15共16个数据库)
flushdb 清除当前数据库
select index 查询 数据库
3.3 list的操作
lpush key value //将一个值/或是多个值插入列表头
rpush key value //将一个值/或者多个值插入列表未
lpop key //移除表头(左)
rpop key //移除尾(右)
lrange key start stop start:0 stop :-1 列表区间的值
lrem key count value //根据count值移除列表key中与参数 value 相等的元素count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值
lindex key index index的索引元素
ltrim key start stop //对一个列表进行修剪
Redis怎么实现栈(FILO)和队列(FIFO)
list控制同一边进,同一边出就是栈
list控制一边进,另一边出就是队列.
3.4 set的操作
sadd key member //将一个元素加入到集合key中
srem key member//将一个元素从集合中移除
smembers key //返回集合 key 中的所有成员
3.5 hash的操作
hset key name value//添加一个name=>value键值对到key这个hash类型
hget key name //获取hash类型的name键对应的值
hmset key name1 key1 name2 key2 //批量添加name=>value键值对到key这个hash类型
hmget key name1 name2//批量获取hash类型的键对应的值
hkeys //返回哈希表 key 中的所有键
hvals //返回哈希表 key 中的所有值
hgetall //返回哈希表 key 中,所有的键和值
我们将user:1(name:zhangsan,age:18,sex:nv)的信息保存在hash表.
3.6 事务(了解)
multi //标记一个事务块的开始。
exec //执行所有事务块内的命令。
弱事务 : 日志
强事务 :同时成功 同时失败-- 金融数据
discard //取消事务,放弃执行事务块内的所有命令。
Redis的事务在执行exec指令时,才批量执行操作,没有回滚操作
3.7 订阅/发布(了解)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a7OJAYN7-1576752704286)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1576730577276.png)]
3.8 密码的设置
1.通过命令动态调整密码
CONFIG SET 命令可以动态地调整 Redis 服务器的配置而无须重启,重启后失效
CONFIG SET requirepass 123456 //将密码设置为123456
CONFIG SET requirepass "" //清除密码
AUTH 123456 //输入密码进行认证
2.通过配置文件设置密码
在配置文件redis.widows.conf中增加一行代码
requirepass 123456
将密码123456设置到配置文件中,redis启动时加载该文件,即可启用密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4gMP39b-1576752704287)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1576730700829.png)]
配置文件的方式加密
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PeEEBZop-1576752704289)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1576735667733.png)]
4 Redis持久化;(掌握)
4.1 导包
4.2 运用
public class RedisTest {
@Test
public void testRedis() throws Exception{
Jedis jedis = new Jedis("127.0.0.1", 6379, 1000);
jedis.auth("123456");
//执行操作
jedis.set("test", "sansan");
System.out.println(jedis.get("test"));
//关闭连接
jedis.close();
}
//pool 连接池
@Test
public void testConnnet() throws Exception{
//创建jedisPOOL对象
JedisPoolConfig config = new JedisPoolConfig();
//2 做配置-四个
config.setMaxIdle(2);
config.setMaxTotal(10);
config.setMaxWaitMillis(1*1000); //创建连接超时
config.setTestOnBorrow(true);//获取连接是测试连接是否畅通
JedisPool jedisPool = new JedisPool(config, "127.0.0.1", 6379, 1 * 1000, "123456");
Jedis jedis = jedisPool.getResource();
jedis.set("name", "郭大宝");
String name = jedis.get("name");
System.out.println(name);
//redis 结构
System.out.println(jedis.keys("*"));
//string 的操作 Crud
System.out.println(jedis.set("name","java"));//新增
System.out.println(jedis.get("name"));//获取
System.out.println(jedis.set("name","javaee"));//修改,将会覆盖之前的数据
System.out.println(jedis.get("name"));//获取
System.out.println(jedis.del("name"));//删除
System.out.println(jedis.keys("*"));//查看所有的key
//list 数组
jedis.lpush("students", "1", "5", "3", "2", "5");
List<String> list = jedis.lrange("students", 0, -1);
System.out.println(list);
//hash
System.out.println("+=============================+");
jedis.hset("stuMap","student","erbao");
System.out.println(jedis.hget("stuMap","student"));
//清除当前数据库
jedis.flushDB();
//排序
jedis.lpush("nums","1","5","9","3","7","1");
System.out.println(jedis.lrange("nums",0,-1));
//默认是升序
System.out.println(jedis.sort("nums"));
//降序的写法
SortingParams sortingParams = new SortingParams();
sortingParams.desc();
System.out.println(jedis.sort("nums",sortingParams));
//对字母进行排序
System.out.println("++++++++++");
jedis.lpush("language","c++","java","php","test");
SortingParams sortingParams1 = new SortingParams();
sortingParams1.alpha();
sortingParams1.desc();
System.out.println(jedis.sort("language",sortingParams1));
//释放连接
jedis.close();
//摧毁pool池
jedisPool.destroy();
}
//事务的运用
@Test
public void testTranslation() throws Exception{
Jedis jedis = new Jedis("127.0.0.1", 6379, 1000);
jedis.auth("123456");
jedis.flushDB();
jedis.set("name","qinqin");
jedis.set("age","18");
System.out.println(jedis.mget("name","age"));
Transaction multi = jedis.multi();
multi.incr("name");
multi.incr("age");
List<Object> list = multi.exec();
//弱事务 ,一个显示,一个不显示
System.out.println(list);
//关闭链接
jedis.close();
}
}
5Redis持久化配置
5.1配置:在redis.windows.conf 中配置
RDB模式
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
如何关闭 rdb 模式:
save ""
# save 900 1 //至少在900秒的时间段内至少有一次改变存储同步一次
# save xxx
# save 60 10000
AOF追加模式
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
如何开启aof模式:
appendonly yes //yes 开启,no 关闭
# appendfsync always //每次有新命令时就执行一次fsync
#这里我们启用 everysec
appendfsync everysec //每秒 fsync 一次
# appendfsync no //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)
其它的参数请大家看redis.conf配置文件详解
6 Redis淘汰策略;(掌握)
6.1Redis淘汰策略
淘汰一些数据,达到redis数据都是有效的。选择合适的淘汰策略进行淘汰。
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰