Redis数据库安装、使用、数据类型、常用命令(详解)

安装

Releases · tporadowski/redis · GitHub

直接去选择msi格式的,窗口式的安装,一步一步。

安装过程中有一个选项是问你需不需要配置到环境变量中,选上这个选项,不选的话,需要自己去配环境变量。

检查是否安装配置成功:

在cmd 中输入

redis-cli

默认有15个数据库,默认在第0个,可以用select切换数据库。

介绍

Redis:是用C语言开发的Key-Value类型的NoSQL数据库,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘.上进行保存。

NoSQL数据库:就是除去Mysql这种关系型数据库之外的数据库的通常。

redis存的全是字符串

在Redis中,数据存储的时候是以字符串形式存储的,而不会区分数据是数字还是字符串。Redis是一个无模式数据库,它将所有数据都视为二进制字符串。这意味着 Redis 存储的任何内容都是字符串,而 Redis 本身不会对数据类型进行检查。

既然存的全是字符串,那为什么有的数据还能自增自减?

Redis 中之所以能够执行自增(INCR)和自减(DECR)操作,尽管数据存储的全是字符串,是因为 Redis 实际上并不是将所有字符串都当作普通字符串对待。Redis 在内部会根据字符串的内容来判断其是否可以被解释为整数。

具体来说,当你执行自增和自减操作时,Redis会检查键的值是否满足以下条件:

  1. 键的值必须是一个有效的整数字符串。
  2. 键的值必须在 Redis 可以表示的整数范围内。

如果键的值满足这两个条件,Redis 就会将其解释为整数,并执行自增或自减操作。否则,Redis 将返回一个错误,指示键的值不能解释为整数。

优点

  1. 性能好,访问快
  2. 支持的数据类型完善
  3. 支持持久化、支持分布式

缺点

  1. 内存限制: 由于数据存储在内存中,Redis的数据量受到物理内存的限制。如果数据集太大,可能会导致内存不足的问题。
  2. 单线程模型:Redis在单个线程中执行命令,这意味着在处理大量客户端请求时,性能可能会受到限制。

适用场景

  1. 缓存:最常用的一个就是作为缓存层, 将频繁访问的数据存储在内存中, 减轻数据库、服务器的负担,加快访问速度。
  2. 排行榜:热门帖子放到缓存中,访问频率高
  3. 计数器:这个东西访问频率特别高,每个用户点击一下就计数+1,放内存里比较好
  4. 点赞、关注、评论:这些访问频率高的操作
  5. 消息队列:可以做这个 轻量级的消息队列系统, 用于处理实时事件和任务队列。

Redis为什么快?

  1. 内存存储:Redis将数据存储在内存中,而不是传统的磁盘存储。内存存储意味着数据可以直接从RAM中读取,而无需磁盘I/O操作,这使得读取和写入操作非常快速。
  2. 单线程:Redis采用单线程模型来处理命令请求,它不需要进行多线程之间的锁定和同步操作。每个请求都是按顺序处理的,这可以减少竞争和上下文切换,提高性能。
  3. 数据结构优化:Redis支持多种高性能数据结构,例如哈希表和有序集合,这些数据结构经过精心设计和优化,以在内存中快速执行操作。这些数据结构使Redis非常适合各种用例,如计数器、排行榜和消息队列。

数据类型、命令

存储的数据类型:key,value形式存储的 key值是String类型的 value值是下面五种形式。

常用的是5种类型,还有其他的类型,例如位图、超级日志等类型。

(列表可重复,集合不可重复)

  • 字符串类型就是:key值: value1,相当于一个字符串
  • 哈希类型就是:key值: key1:value1,key2:value2,key3:value3,相当于 键值对集合
  • 列表就是:key值: value1,value2,value3,相当于 字符串列表
  • 集合、有序集合就是:key值: value1,value2,value3,相当于 字符串集合

所有类型通用操作

启动: redis-cli

数据库转换:select 11(0-15共16个数据库)

查询所有的key: keys *

查询所有key以test开头的:keys test*

查看某个key的类型:type key值

清空所有库里面的数据 (谨慎使用:flushall

删除某个key: del key值

判断值是否存在:exists key值1,key值2... 

查看剩余的时间:ttl key值

或者直接设置过期时间:expire key值 秒数

1.String字符串

set:格式:set key值 value1 ex 秒数 后面这是设置的过期时间

获取value:get key值

获取值的长度:strlen key值

值自减:decr key值(必须是数字)

值自增:incr key值(必须是数字)

2.hash哈希集合

key不可重复:哈希集合key值的每个键值对中的小key不能重复,但是value可以重复

存储:hset key值 key值(小) value值(小)

同时设置多个小key小value: hmset key值 key值(小) value值(小) key值(小) value值(小)....

取值:hget key值 key值(小)

举例:

#存了一个key是user:1的哈希集合,集合里面存了一个键值对 name:Alice
hset user:1 name "Alice" 
#取出name的值
hget user:1 name

取所有值: hgetall key值

看是否存在:hexists key值 key值(小)

获取集合全部的key:hkeys key值

获取集合全部的value:hvals key值

3.list列表

有序可重复

像一个水平的矩形,可以从左右两边加数据、减数据

从左边开始存数据 lpush key值 value1 value2 value3 value4 value5 ..

存进去就是:value5 value4 value3 value2 value1

从右边开始存数据 rpush key值 value1 value2 value3 value4 value5 ..

存进去就是:value1 value2 value3 value4 value5

从左边获取并删除数据:lpop key值

从右边获取并删除数据:rpop key值

获取某个下标的数据:lindex key值 index值

查看长度:llen key值

查看下标从0-2的数据:lrange key值 0 2

4.set集合

类似hashset 无序不可重复

存数据: sadd key值 value1 value2 value3...

删数据:srem key值 value1

随机获取并删除数据:spop key值 数量 (随机去数据可以用来抽奖)

获取所有成员:smembers key值

获取成员个数:scard key值

并集操作:suntion key值1 key值2

交集操作:sinter key值1 key值2

5.zset有序集合

有序且不重复

它是按照分数排序。

每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员(value)是唯一的,但分数(score)却可以重复。

添加:zadd key score1 value1 [score2 value2 ...] (若存在更新分数)

删除: zrem key value1 [value2 ...]

获取分数:zscore key value1

获取元素个数:zscore key

加分减分:zincrby key 加几分(数字) value1(可以为负数来减少分数)

获取排名:zrank key value1 (下标从0开始)

获取倒序排名 zrevrank key value1

范围获取:zrange key 起始下标 终止下标 [withscores](加withscores会同时输出分数)

不排序范围获取:zrevrange key 起始下标 终止下标 [withscores]

如果觉得文章还不错,麻烦点个赞吧

猜你喜欢

转载自blog.csdn.net/KangYouWei6/article/details/132791673
今日推荐