一、Redis基础

一、Redis基础知识

1、基本数据结构

key - value;

可以理解为一个大的hashMap;

2、体系知识

2大维度:应用、底层原理;

3大主题:高性能、高可用、高扩展;

3、Redis 缓存的作用

redis并发量高,有效降低数据库压力;

可以实现一个排行榜;value -- 列表、有序集合(set zset);

计数器(限流);浏览次数、视频(播放量、点赞量、关注量)

社交网络:消息、IM中台系统(redis<查询>、MQ<数据异构问题>)

消息队列(MQ):发布订阅,参考kafka的设计;

二、基本命令

1、Linux 安装 Redis 命令

创建目录:mkdir /usr/local/redis

解压文件:tar -zvxf redis-7.2.4.tar.gz -C ../../../usr/local/redis

开启服务:/src/redis-server

检查服务:ps -ef | grep redis

打开客户端:/src/redis-cli

2、Redis的bin目录下的可执行文件

 

 

3、启动 

ps -ef|grep redis                                         // 检查是否启动redis

./redis-server ../redis-6.2.7/redis.conf        // 以redis.conf配置文件启动redis服务

./redis-cli                                                    // 打开redis客户端

4、停用

shutdown

./redis-cli -p 6379 shutdown

5、库

Redis一共有16个库,分别是0~15;常用0库

6、key的命名规则

业务名称_对象名_id

key的长度不宜太长;

7、全局命令

① 查询命令

命令

作用

keys *

查看所有键(不推荐使用)

keys a*

模糊查询键

dbsize

查看key数量

exists key

检查键是否存在

ttl key

查看过期时长 5s;

返回:

-2表示键不存在;

-1表示键没设置过期时间;

0 表示刚好过期;

type key

查看value的数据类型

randomkey

随机返回一个已经存在的key

mget key1 key2 ...

同时查询多个key的value

strlen key

查询value的字节数

getset key1 key2 key3

② 写入命令

命令

作用

expire key 5s

pexpire key 5000ms 毫秒

expireat key 时间戳

设置过期时长;

不能对value设置过期时长;只能对key设置过期时长;

set key value

添加一个键值对;

坑:

1、如果key存在,就覆盖它的值;

2、如果这个key存在并且设置了过期时间,那么这个key的过期时间重置为永不过期;

setnx key value

set key value nx

添加键值对;

如果key存在就不让添加;

set key value xx

添加键值对;

如果key不存在就添加不了;

append key value

给value后面追加字符串

mset key1 value1 key2 value2 ...

同时添加多个键值对;

rename name1 name2

修改键名称 name1 -> name2;

但是如果name2已存在,会先删除name2,再做修改;name2的值会丢失;

renamenx name1 name2

修改键名称 name1 -> name2;

如果name2已存在,就返回0;表示name2已存在,不让修改;

③ 删除命令

命令

作用

del key

删除键值对

三、Redis基础数据类型

1、基础数据类型

key一定是String;value的基础类型有5种:

字符串

hash

List

set(无序集合)

zset(有序集合)

2、字符串类型 String

Redis自己实现了一个String,不是用C语言提供的;

最大是512M;

① 使用场景:共享session、计数器

计数器

整数计数器:

incr key-name                   //计数器自增  1

incrby key-name 3            //计数器加   3

decr key-name                 //计数器自增 -1

decrby key-name 3          //计数器加   -3

get key-name                   //获取计数器

浮点数计数器:

(incr-by-float) incrbyfloat key-name 0.5       //计数器加 0.5

② 字符串其他操作

字符串其他操作

命令

作用

getset key value

先查询key的旧value;

再给key覆盖上新的value;

setrange key 5 value

在key的旧value上的第5个位置覆盖一个字符串;

getrange key 0 5

查询key的value的截取字符串;

第0位 ~ 第4位;

3、Hash类型

① 结构

key:     String

value:  HashMap<String,String>

② 命令

命令

作用

hset key name value

添加一条记录;

设置一个属性;

hmset key name1 value1 name 2 value2

添加一条记录;

可以同时设置多个属性;

hsetnx key name value

添加一条记录;

如果key已存在则不覆盖;

hget key name

查询记录;

key的name属性;

hlen key

查询key的属性数量;

hmget key name1 name2 name3

批量查询key的多个属性;

hexists key name

查询key是否有name属性;

hkeys key

查询key的所有属性;

hvals key

查询key的所有属性值;

hgetall key

查询key的全部属性和属性值;

返回值以键值对成对返回;

hincrby key id 2

给key的id属性的值做+2操作;

③ String 与 Hash 的使用场景

String

优点:

  • 简单直观,每个键对应一个值;

  • 适合数据量小;

缺点:键数过多,占用内存多,对象信息过于分散,不用于生产环境;

将对象序列化(JSON)存入String

优点:编程简单;

缺点:

  • 序列化与反序列化有一定开销;

  • 不能截取需要的字段,只能全取出来;

使用Hash类型

优点:

  • 简单直观,效率较高,使用合理可减少内存空间消耗;

  • 可以截取需要的字段;

  • 适合数据量大;

缺点:

  • 老版本注意ziplist与hashtable两种编码转换;

  • redis3.2以后统一是quickList处理;

4、List

① 特点

最大元素个数:(232 - 1)个;

元素有序,可以根据下标查询(单个、区间);

可以两头插入元素;

可以插入重复的元素;

② 命令

命令

作用

  • 插入;
  • rpush key node1 node2 node3;
  • lpush key node1 node2 node3;左边
  • 从右边开始插入元素;
  • 每次返回当前list已有元素个数;
  • 区间查询;
  • lrange key 0 -1;
  • 从第0个查询到最后一个;
  • 单个查询;
  • lindex key index;
  • 查询下标为【index】的元素;
  • 长度;
  • llen key;
  • 查询长度;
  • 弹出;
  • rpop key count;
  • lpop key count;左边
  • 弹出count个元素;
  • 弹出的顺序与出栈顺序一致注意
  • 阻塞弹出;
  • brpop key timeout;// 右边
  • blpop key 0; // 永远阻塞
  • blpop key timeout;// 阻塞多少秒
  • 弹出一个元素;注意方向
  • 列表里面没有数据就等着,直到有了数据再将其弹出;
  • 第一个返回值是key名称,要注意;
  • 删除;
  • lrem key count element;
  • 从左边开始,删除count个element;
  • 裁剪;
  • ltrim key start end;
  • 保留 [start,end] 区间里面的元素;
  • 设置;
  • lset key index node1;
  • 设置下标为【index】的元素为node1;

5、Set

① 特点

最大元素个数:(232 - 1)个;

无序;

不允许重复;

② 命令

命令

作用

  • 添加;
  • sadd key node1 node2 node3;
  • 向set中添加元素;
  • 无序;
  • 唯一;
  • 查询;
  • smembers key;
  • 查询set中所有元素;
  • 随机查询;
  • srandmember key; // s-rand-member
  • 随机返回元素;
  • 查询数量;
  • scard key;

  • 是否已存在;
  • sismember key node;
  • 检查node是否已存在;
  • 返回值:0-不存在,1-存在;
  • 删除;
  • srem key node1 node2 node3;
  • 删除指定元素;
  • 弹出;
  • spop key ;
  • spop key count;
  • 弹出元素;
  • 不指定为1;
  • 交集;
  • sinter key1 key2;
  • 取多个集合的交集;
  • 并集;
  • sunion key1 key2;
  • 取多个集合的并集;
  • 差集;注意顺序
  • sdiff key1 key2;
  • sdiff key2 key1;
  • 取多个集合的差集;
  • 只返回第一个集合的差集元素;
  • 顺序很重要;
  • 保存新集合;
  • sinterstore newKey key1 key2;
  • // s-inter-store
  • sunionstore newKey key1 key2;
  • // s-union-store
  • sdiffstore newKey key1 key2;
  • // s-diff-store
  • 将查询出来的新集合保存;

③ 应用场景

打标签:找兴趣相同的好友;

6、ZSet

① 特点

元素有序;

② 结构

[分数|元素]  ->  [score|member]

③ 命令

命令

作用

  • 添加
  • zadd key score member;
  • nx:只添加,不修改;
  • xx:只修改,不添加;
  • 向zset中添加元素
  • zacrd key;
  • 查询个数;
  • zscore key member;
  • 查询分数;
  • zrank key member;
  • zrevrank key member;
  • 查询正序排名;
  • 查询倒序排序;
  • zrem key member;
  • 删除元素;
  • zincrby key 6 member;
  • 加6分;
  • zrange key 0 1;
  • zrevrange key 0 1;-- 倒序
  • 查询第1、2个元素;
  • zrange key 0 1 withscores;
  • 查询第1、2个元素和分数;
  • zrangebyscore key 96 101;
  • zrangebyscore key -inf +inf;
  • 按分数查询;
  • 无穷;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值