redis学习笔记


概念

redis是一款高性能的NoSql系列的非关系型数据库

特征

数据之间没有关联关系

数据存储在内存中

安装

linux

  1. 宝塔直接安装(不建议)
  2. 下载解压版的,ftp传到服务器再解压
  3. 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整合

  1. 引入spring-boot-starter-data-redis依赖
  2. 配置信息
  3. 测试类导入redisTemplate包
  4. 使用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属性


文章作者: WJF
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WJF !
  目录