redis下载(windows5.0.10):https://github.com/tporadowski/redis/releases
redis能干嘛
1.内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof)
2.效率高,可以用于高速缓存
3.发布订阅系统
4.地图信息分析
5.定时器、计时器(浏览量!incr decre就可以,不需要从数据库中取数据)
redis特性:
1、多样的数据类型
2、持久化
3、集群
4、事务
redis为什么单线程还这么快?
redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的。因为多线程CPU会上下文切换,这是一个耗时的操作!!!对于内存系统来说,如果没有上下文切换,效率就是最高的。多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案。
redis 默认有16个数据库,从零开始,初始默认使用零号数据库。
redis 默认端口:6379
基本命令
select dbID (0-15):切换数据库
dbsize:查看当前数据库的key的数量
flushdb:清空当前数据库
flushall;清空全部数据库
keys *:查看所有key;
exists key:判断某个key是否存在;
move key dbID(0-15): 将键值对移到其他数据库
expire key seconds: 为给定的key设置过期时间
ttl key: 查看还有多少秒过期,-1表示永不过期,-2表示已过期
type key: 查看key是什么类型
String类型
append key "hello":追加字符串,如果key不存在,就相当于setkey
strlen key: 获取字符串长度
incr key:自增1
decr key:自减1
INCRBY key 10:自增10
DECRBY key 10:自减10
getrange key start end:获取指定区间范围内的值,类似between and的关系;从零到负一表示全部
setrange key start xxx:替换start位置开始的字符串
setex key second "hello":设置过期时间
setnx key second "hello":不存在则设置(在分布式锁中会常常使用)
mset k1 v1 k2 v2 k3 v3:同时设置多个值(原子性操作,一起成功,一起失败)
mget k1 k2 k3:同时获取多个值
set user:1{name:zhangsan,age:3} //设置对象
mset user:1:name zhangsan user:1:age 2 //另一种设置对象方式
mget user:1:name user:1:age
getset key "hello":如果存在值,获取原来的值,并设置新的值
SpringBoot 集成 redis
1.先写配置文件
2.测试
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
// redisTemplate 操作不同的数据类型,api和我们的指令是一样的
// opsForValue 操作字符串 类似String
// opsForList 操作List 类似List
// opsForHah
// 除了基本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务和基本的CRUD
// 获取连接对象
//RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
//connection.flushDb();
//connection.flushAll();
redisTemplate.opsForValue().set("key","hello");
System.out.println(redisTemplate.opsForValue().get("key"));
}
redis持久化
redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,一旦服务器进程退出,服务器中的数据库状态也会消失,所以redis提供了持久化功能。
RDB:
AOF: