概念
redis是一款高性能的NoSql系列的非关系型数据库
特征
数据之间没有关联关系
数据存储在内存中
安装
linux
- 宝塔直接安装(不建议)
- 下载解压版的,ftp传到服务器再解压
- ubantu和Debian可以使用apt命令安装
配置是注意注释配置文件中的bind属性,不然redis只能本地访问
环境安装
yum install gcc-c++
make
make install
默认安装路径/usr/local/bin
redis默认不是后台启动
在配置文件中将daemonize改为yes设置后台启动
操作
启动服务
redis-server [配置文件路径]
连接测试
redis-cli -p 6379
ping
查看redis的进程是否开启
ps -ef|grep redis
关闭redis服务
连接状态下使用shutdown
redis-benchmark测试
redis-benchmark是一个压力测试工具
# 测试:100个并发连接 100000个请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000
基础知识
redis默认有16个数据库,默认第0个,可以使用select切换
127.0.0.1:6379> select 3
OK
查看数据库所有key
127.0.0.1:6379> keys *
1) "myhash"
2) "counter:__rand_int__"
3) "name"
4) "mylist"
5) "key:__rand_int__"
清除当前数据库
flushdb
清除所有数据库
FLUSHALL
redis是单线程的
redis基于内存操作,cpu不是redis性能瓶颈,redsi的瓶颈是机器内存和网络带宽
redis可以用作数据库,缓存和消息中间件
EXISTS [key]
# 查看键是否存在
move [key] [db] #移动数据
del [key] #移除数据
EXPIRE [key] [time] #设置过期时间,单位为秒
ttl [key] # 查看当前key的剩余时间
type [key] # 查看当前key的类型
五大基本数据类型
Reds-key
String
redis的String是二进制安全的,可以包含任何数据,如数字,字符串,图片或者序列化对象
基本操作
set [key] [value] # 设置值
get [key] # 获取值
keys * # 查看所有键
APPEND [key] [value] # 追加内容
STRLEN [key] # 显示值的长度
set views 0
incr views # 自增1
decr views # 自减1
INCRBY views 10 # 指定自增步长为10
DECRBY views 5 # 指定自减步长为5
GETRANGE [key] [startIndex] [endIndex] # 截取字符串
SETRANGE [key] [startIndex] xx
# 从索引为1的位置开始,替换后面的两位为xx
setex # 设置过期时间
setnx # 不存在再设置
mset # 同时设置多个值,空格切分
mget # 同时获取多个值
getset db redis
# 获取db的值后将值设置为redis
List
在redis中,list是一个双向链表,可以用list实现栈,队列,阻塞队列
所有的list命令以L和R开头,表示从左边操作还是从右边操作
LPUSH list one # 将一个值或者多个值,插入到列表左侧头部
LRANGE list 0 -1 # 获取list中的所有值
# 移出列表的第一个元素
LPOP
RPOP
# 获取某一个值
LINDEX list [索引]
# 移出指定个数的值
lrem list [数量] [值]
# 移出列表的最后的一个元素并添加到新的列表中
rpoppush [原列表] [新列表]
# 更新当前下标的值
lset list 0 [原来的值]
Set
set中的值是不能重读的
# 添加
sadd myset [值]
# 查看
smermbers myset
# 获取set中的元素个数
scard myset
# 移出
srem myset []
# 随机删除一个set集合中的元素
spop myset
# 查交集
sinter [key1] [key2]
# 并集
sunion [key1] [key2]
# 差集
sdiff [key1] [key2]
ZSet
有序集合
不同成员会关联一个double类型的分数,通过分数来比较大小
# 添加
zadd key score1 member1
# 获取成员数
zcard key
# 查看全部
zrange key 0 -1
# 查看分数
zsore key member1
# 查看对应的排名(0开始),升序
zrank key member
# 降序
zrevrank key member
Hash
Map集合
# 添加一个键值对
hset myhash [键] [值]
# 取值
hget myhash 键
# 删除指定的key字段
hdel myhash 键
Springboot整合
- 引入spring-boot-starter-data-redis依赖
- 配置信息
- 测试类导入redisTemplate包
- 使用redisTemplate完成操作
配置文件
spring.data.redis.host=192.168.33.131
spring.data.redis.port=6379
spring.data.redis.password=123456
spring.data.redis.database=0
# 选择第几个库
使用示例
(已注入redisTemplate)
String类型
@Test
void demo1(){
//String
//set
redisTemplate.opsForValue().set("name","wjf");
//get
System.out.println(redisTemplate.opsForValue().get("name"));
//del
redisTemplate.delete("name");
System.out.println(redisTemplate.opsForValue().get("name"));
}
list类型
@Test
void demo2(){
//list
//push
redisTemplate.opsForList().leftPush("name2","v1");
//range,查询
List<String> name2 = redisTemplate.opsForList().range("name2", 0, -1);
System.out.println(name2);
//lpop,弹出
System.out.println(redisTemplate.opsForList().leftPop("name2"));
}
set类型
@Test
void demo3(){
//set
//add
redisTemplate.opsForSet().add("name3","v1","v2","v3");
//查询.smerbers
Set<String> name3 = redisTemplate.opsForSet().members("name3");
System.out.println(name3);
}
hash类型
@Test
void demo4(){
//hash
//hset,添加单个值,添加多个值使用putAll方法
redisTemplate.opsForHash().put("name4","name","wjf");
//获取,hget
System.out.println(redisTemplate.opsForHash().get("name4","name"));
}
zset类型
@Test
void demo5(){
//zset
//zadd
redisTemplate.opsForZSet().add("name5","v1",10D);
redisTemplate.opsForZSet().add("name5","v2",15D);
redisTemplate.opsForZSet().add("name5","v3",20D);
//rank
System.out.println(redisTemplate.opsForZSet().rank("name5", "v1"));
}
特殊类型
GEO
存储和操作地理位置信息
有添加,计算位置之间距离,根据中心点坐标和距离范围查地理位置集合
# 添加
geoadd china 115.7 39.4 beijing
# china是库名,后面是纬度和经度,最后是坐标名称
# 读取
geopos china beijing
# 距离
geodist china beijing shanghai km
# 查询china库中beijing和上海的坐标距离,最后的单位可以是m,km,ft,mi
# 根据中心点查范围内坐标
georadiusbymember china beijing 300 km
HyperLogLog
用来做基数统计的算法
可以去重,可以合并两个hyperloglog
# 添加
pfadd key名 数据
# 合并
pfmerge key名1 key名2
# 统计个数
pfcount key名
bitmap
位图同样属于String类型,使用位来存储数据,可以节省很多空间
适用于数据量大且使用二值统计的场景
# 加入数据
setbit key 位 值
# 表示在key的第几位插入值
# 查看数据
getbit key 位
# 统计所有结果
bitcount key
持久化
RDB
快照方式,可压缩
# 前台阻塞保存
save
# 后台保存
bgsave
# 恢复数据
systemctl restart redis-server
AOF
记录命令,恢复时执行记录的所有命令
要在配置文件中开启
appendonly属性