关于redis的总结

非关系型数据库
非关系型数据库一般是指NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,作为关系数据库的一个重要补充 。

Redis作用、适用场景

Redis常用命令

一、redis启动
本地启动:redis-cli
远程启动:redis-cli -h host -p port -a password
二、清空Redis所有key
flushdb # 清除当前数据库的所有keys
flushall # 清除所有数据库的所有keys
三、查询匹配key
keys * # 查看所有keys
keys prefix_* # 查看前缀为"prefix_"的所有keys
四、key基本操作
exists key # 确认一个key是否存在
set key value # 设置key和value
get key # 获取key的value
del key # 删除一个key
type key # 返回值的类型
rename oldname newname # 重命名key
dbsize # 返回当前数据库中key的数目
五、String字符串
set key value # 设置指定 key 的值
get key #获取指定 key 的值
strlen key # 返回 key 所储存的字符串值的长度
mset key value [key value ...] # 同时设置一个或多个 key-value 对
mget key1 [key2..] # 获取所有(一个或多个)给定 key 的值
六、List列表
rpush key value # 在名称为key的list尾添加一个值为value的元素
lpush key value # 在名称为key的list头添加一个值为value的 元素
lpop key # 返回并删除名称为key的list中的首元素
rpop key # 返回并删除名称为key的list中的尾元素
llen key # 返回名称为key的list的长度
lindex key index # 通过索引获取列表中的元素
lrange key start stop # 获取列表指定范围内的元素
七、Set无序集合
sadd key member1 [member2] # 向集合添加一个或多个成员
smembers key # 返回集合中的所有成员
scard key #获取集合的成员数
sinter key1 key2 # 求交集
sunion key1 key2 # 求并集
sdiff key1 key2 # 求差集
八、Zset有序集合
zadd key score1 member1 [score2 member2] # 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zcard key # 获取有序集合的成员数
zrange key start stop # 通过索引区间返回有序集合成指定区间内的成员
zscore key member # 查询成员的分数值
zrangebyscore key min max # 通过分数返回有序集合指定区间内的成员
九、Hash哈希
hset key field value #将哈希表 key 中的字段 field 的值设为 value
hget key field #获取给定字段的值
hmset key field1 value1 [field2 values] # 一次赋值多个字段
hmget key field1 [field2] # 一次取多个字段的值
hexists key field # 判断字段是否存在
hkeys key # 获取所有字段名
hvals key # 获取所有字段值
hlen key # 获取字段数量
hgetall key # 获取所有字段的值
hdel key field # 删除字段
十、设置key的生存时间
expire key seconds #设置key的有效时间 单位为秒
ttl key #获取key的剩余有效时间,持久key返回-1,key不存在返回-2,具体时间返回秒数
Redis 数据备份与恢复
Redis SAVE 命令用于创建当前数据库的备份。
1、数据备份
redis Save 命令基本语法如下:redis 127.0.0.1:6379> SAVE
该命令将在 redis 安装目录中创建dump.rdb文件。
2、恢复数据
如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
获取 redis 目录可以使用 CONFIG GET dir

非关系型数据库的优点:

  • 分布式计算,无需经过SQL层的解析,读写性能高;
  • 高可扩展性,基于键值对,数据没有耦合性,容易扩展;
  • 存储数据的格式丰富多样:包括key-value形式、文档形式、图片形式等,而关系型数据库则只支持基础类型。
非关系型数据库的缺点:
  • 没有标准化,不提供SQL支持,学习和使用成本较高;
  • 查询功能有限;
测试Redis时关注要点
缓存有效,验证相关业务功能?
缓存被删除,验证相关业务功能?
缓存过期失效,验证相关业务功能?
缓存达到上限怎么处理?
redis缓存服务停掉?
缓存超时,验证相关业务功能?
缓存穿透?(面试常问)
缓存雪崩? (面试常问)
  • 缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
  • 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
  • 缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
  • Redis为什么会这么快?
    1、Redis是纯内存操作,需要的时候可以以手动或自动化的方式将数据持久化到硬盘中
    2、Redis是单线程,从而避开了多线程中上下文频繁切换而浪费CPU时间片的操作。
    3、Redis中存储数据的数据类型大量使用高效率的数据结构算法,对数据的操作更加快捷高效
    4、使用底层协议不同,比如Redis自创RESP通讯协议,即保证了运行效率又保证了数据通讯
    5、使用多路I/O复用模型,非阻塞I/O
  • python获取redis key过期的信息 python获取redis key过期的信息 - WU大雄 - 博客园

常用的五种类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)

1.String类型

String是最简单的类型,一个key对应一个value

String类型的数据最大512MB。
String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下,该integer的值限制在64位有符号数。
在list、set和zset中包含的独立的元素类型都是Redis String类型。

2.List类型

链表类型,主要功能是push、pop、获取一个范围的所有值等。其中的key可以理解为链表的名字。

在Redis中,list就是Redis String的列表,按照插入顺序排序。比如使用LPUSH命令在list头插入一个元素,使用RPUSH命令在list的尾插入一个元素。当这两个命令之一作用于一个空的key时,一个新的list就创建出来了。
一个List的最大长度是2^32-1个元素 (4294967295, 每个列表超过40亿个元素)。

3.Set类型

集合,和数学中的集合概念相似。操作中的key理解为集合的名字。

在Redis中,set就是Redis String的无序集合,不允许有重复元素。

Set的最大元素数是2^32-1。

Redis中对set的操作还有交集、并集、差集等。

4.ZSet类型

Zset是set的一个升级版本,在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。

Zset的最大元素数是2^32-1。

对于已经有序的zset,仍然可以使用SORT命令,通过指定ASC|DESC参数对其进行排序。

5.hash类型

hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值