Redis快速入门

Redis前置知识

Redis 是什么?

MySql数据库在磁盘当中,相较于主存,磁盘的访问速度太慢了,因此就有了一个中间件(在主存当中),它以键值对的形式存储MySql中的常用数据,其访问速度比直接访问MySql要快很多 ,这就是Redis (相当于计组当中的Cache与主存的关系)。

当要访问mysql数据库时,程序会先到Redis当中去访问,Redis当中没有,才到mysql中去访问,并将访问到的数据写入Redis中去 (下次访问该数据时就能直接在Redis中直接访问到)。

Redis (NoSql非关系型类型数据库) 如下:

因为Redis 在内存当中,一旦断电,数据就全部丢失了,因此为了避免这种情况,Redis会定期的将数据自动写入磁盘,实现数据持久化。

Redis 下载与安装(windows 版)

  1. 通过以下地址
    redis 5.0.14获取到redis的windows安装包。
  1. 下载完成后,点击安装包,进行安装
  1. 一路next,但注意以下两个部分


  1. 安装完成后,打开windows的cmd,进入你的redis安装地址,输入命令redis-server,结果如下图,则表明安装成功。

注意:上图表示redis服务已开始执行,若关闭该cmd,则redis服务停止。

  1. 若输入命令redis-server,结果如下图,则表示redis服务已经自启动了,此时可以打开任务管理器,找到redis服务强制关闭,然后在执行第4步操作。
  1. 开启redis服务后,打开一个新的cmd,输入命令redis-cil,即可进入redis 对应的一个客户端,其可以通过各种redis命令来访问redis 的服务端,而服务端就会根据客户端的命令来操作(增删改查 )一块固定的主存空间即redis数据库

上图便是获取redis数据库当中的键"name"对应的值"yuan"(作者提前写入该键值对)

Redis常用命令

Redis 当中是按键值对来进行存储的,键固定为字符串类型,但值的类型却不固定。值可以是字符串(String )类型,哈希(Hash )类型,数组(List )类型,集合(Set )类型,有序集合(Zset)类型共5种类型,根据这5种类型,可以将Redis命令分为5类。

针对键的相关操作

keys * //该指令作用是查看当前redis数据库当中的所有键名

keys * a * //该指令作用是查看当前redis数据库当中的所有的包含"a"的键名

keys a * //该指令作用是查看当前redis数据库当中的所有的以"a"开头的键名

keys * _1 //该指令作用是查看当前redis数据库当中的所有以"_1" 结尾的键名
exists 键名 //判断当前redis数据库当中是否存在该键名,存在返回1,不存在返回0
type 键名 //判断该键名对应的值的类型
del 键名1 键名2 键名3 //删除redis当中对应的键值对
ttl 键名 //查看当前键值对还有多少时间过期(单位s),返回剩余时间。

//-1表示该数据永不过期, -2 表示该数据已过期,查看一个不存在的数据,返回值就是-2
expire 键名 过期时间 //重新设置该键值对的过期时间
rename 旧键名 新键名 //为对应的键值对的键重命名
flushall //清空该redis数据库的所有键值对

redis 数据库的配置文件中,默认有0~15共16个数据库,默认操作的是0号数据库

select 数据库号数 //指令作用:切换数据库

字符串类型(最常用)

即值的类型是字符串。

set 键名 值 //其中这个值可以加引号,也可以不加,默认是字符串类型

//该命令作用是向redis数据库中插入一个新的字符串类型的键值对。

若该键已存在,则该命令会覆盖掉键对应的原来的值。
get 键名 //该命令作用是获取该键在redis数据库中对应的值
setnx 键名 值 //其中这个值可以加引号,也可以不加,默认是字符串类型

//其与上面的set命令区别在于该命令插入的值不可覆盖(即不可修改),该命令设置成功返回(integer) 1,失败返回(integer) 0。
setex 键名 过期时间 值 //其中这个值可以加引号,也可以不加,默认是字符串类型

//该命令与上面的set的区别在于,当该键值对在redis数据库当中的存在时间超过了过期时间(单位s),redis就会自动将该键值对清除掉。
mset 键名1 值1 键名2 值2 //批量设置键值对,键值对一一对应,可以同时设置多个键值对
mget 键名1 键名2 键名3 //批量查询多个键各自对应的值,并一一对应返回
append 键名 拼接的值 //在键对应的值后面进行拼接

append 键名 " " //拼接空格
incr 键名 //该指令作用是将键名对应的值自动+1,要求键名对应的值必须是字符串整数
decr 键名 //该指令作用是将键名对应的值自动-1,要求键名对应的值必须是字符串整数
incrby 键名 数字k //该指令作用是将键名对应的值自动+k,要求键名对应的值必须是字符串整数
decrby 键名 数字k //该指令作用是将键名对应的值自动-k,要求键名对应的值必须是字符串整数
strlen 键名 //获取键名对应的字符串(值)的长度

字符比特流操作

针对一个字符比特位(8bit)进行的操作。

setbit 键名 偏移量 值 //该指令作用是设置键名对应的值的一个比特位上的值,未设置的比特位默认为0。

//偏移量是从左往右开始算的(从高位到低位),下标为0~7

//值为对应比特位上的值(只能是1或0)

setbit mybit 6 1 //该指令相当于设置键值对 mybit:00000010(十进制为2)
getbit 键名 偏移量 值 //该指令作用是获取键名对应的值的一个比特位上的值
bitcount 键名 //该指令作用是计算该键名的8个bit位共有多少位的值被设置为1
bitpos 键名 要查找的值p //返回该键对应的值的8个bit位中p第一次出现的位置(从左往右算,位置下标0~7)

数组类型

该类型当中的子元素必须都是字符串类型(string),且允许有重复元素

redis 复制代码
键名:[值1,值2,值3]

lpush 键名 值1 值2 值3 值4 //创建一个数组类型的键值对,并且其值依次从左插入
rpush 键名 值1 值2 值3 值4 //创建一个数组类型的键值对,并且其值依次从右插入
linsert 键名 after 值1 值2 //从左向右找,将值2插入到值1第一次出现的位置后面(值1已存在在键名对应的数组当中)
linsert 键名 before 值1 值2 //从左向右找,将值2插入到值1第一次出现的位置的前面(值1已存在在键名对应的数组当中)
lindex 键名 下标 //从左向右找,查找到键名对应的数组的对应下标的元素
lrange 键名 开始下标 结束下标 //从左向右找,遍历到键名对应的数组的对应下标之间的元素(包括起始下标的元素)
llen 键名 //获取键名对应的数组(值)的长度
lrem 键名 count 值k //删除键名对应的数组对应的值k

//当count=0时,删除数组中所有的k值,当count>0时,删除从左向右数,前count个k值,当count<0时,删除从右向左数,前count个k值
lset 键名 下标 值 //修改键名对应数组的对应下标的值
lpop 键名 //从左往右,删除键名对应数组的第一个元素
rpop 键名 //从右往左,删除键名对应数组的第一个元素

在实际开发中,常用 rpush ,lpop来实现一个队列数据结构

哈希类型

该类型的键值对对应的值又是一组键值对,即字典套字典(map套map)

hset 键名 字段名1 值1 字段名2 值2 字段名3 值3 //设置一个hash类型的键值对

redis 复制代码
键名:{
    字段名1:值1,
    字段名2:值2,
    字段名3:值3,
}

hget 键名 字段名1 //获取键名对应的一个字段名对应的值
hgetall 键名 //获取该键名下的所有字段和对应的值

redis 复制代码
//hgetall返回结果:
字段名1
值1
字段名2
值2
字段名3
值3

hmget 键名 字段名1 字段名2 字段名3 //依次获取字段名1,字段名2,字段名3的值
hvals 键名 //获取该键名下的所有字段的所有的值(不要对应的字段)
hkeys 键名 //获取该键名下的所有字段(不要各自对应的值)
hdel 键名 字段名 //删除该键名下的对应字段
hexists 键名 字段名 //判断当前键名下是否存在该字段名,存在返回1,不存在返回0
hincr 键名 字段名 //该指令作用是将键名对应的字段名的值自动+1,要求键名对应的值必须是字符串整数
hdecr 键名 字段名 //该指令作用是将键名对应的字段名的值自动-1,要求键名对应的值必须是字符串整数
hincrby 键名 字段名 数字k //该指令作用是将键名对应的字段名的值自动+k,要求键名对应的值必须是字符串整数
hdecrby 键名 字段名 数字k //该指令作用是将键名对应的字段名的值自动-k,要求键名对应的值必须是字符串整数

集合类型

集合类型的特点是去重和无序。

sadd 键名 值1 值2 值3 //设置一个集合类型的键值对

redis 复制代码
键名:{值1,值2,值3}

smembers 键名 //获取该键名对应的整个集合
scard 键名 //获取该键名对应的集合中的元素个数
spop 键名 [count=k] //随机删除键名对应的集合的k个元素,后面count是可选参数,默认删一个
srem 键名 值 //删除该键名对应集合的指定的值
sinter 键名1 键名2 //获取键名1和键名2各自对应的集合的交集
sunion 键名1 键名2 //获取键名1和键名2各自对应的集合的并集
sdiff 键名1 键名2 //获取键名1和键名2各自对应的集合的差集(键名1-键名2)

有序集合类型

有序集合(Zset),其内部的元素去重且根据score权重值(权重值必须是数字)来进行排序,从小到大排序。

zadd 键名 权重值1 值1 权重值2 值2 权重值3 值3

//设置一个有序集合类型的键值对,集合内的元素顺序根据各自对应的权重值自动排序,从小到大排序
zrangbyscore 键名 权重值1 权重值2 //获取权重值1与权重值2之间的所有元素,并将它们按从小到大的顺序排列输出
zrevrangbyscore 键名 权重值2权重值1 //获取权重值1与权重值2之间的所有元素,并将它们按从大到小的顺序排列输出
zrange 键名 开始下标 结束下标 //从低到高获取集合当中开始下标与结束下标之间的所有元素(集合元素已自动根据权重值排序好)
zrevrange 键名 开始下标 结束下标 //从高到低获取集合当中开始下标与结束下标之间的所有元素
zcard 键名 //获取有序集合长度
zscore 键名 值 //获取该键对应的有序集合下的制定值的权重值
zrank 键名 值 //获取对应值在有序集合中的排名(从小到大的排名,即排在第几)
zrevrank 键名 值 //获取对应值在有序集合中的排名(从大到小排序)
zcount 键名 权重1 权重2 //获取权重值1与权重值2之间的元素个数
zincrby 键名 数字k 值//对有序集合下的该值的权重值进行加k
zrem 键名 值1 值2 值3 //删除有序集合下的各个值
zpopmin 键名 count //从最低权重值删除共count个元素
zpopmax 键名 count //从最高权重值删除共count个元素

相关推荐
练小杰3 小时前
我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习
android·运维·数据库·经验分享·学习·mysql·adb
silence2504 小时前
oracle基础:将字段从 VARCHAR 修改为 CLOB
数据库·oracle
2301_767233225 小时前
数据库中的并发控制
数据库·oracle
->yjy5 小时前
数据库系统概论期末复习
数据库·oracle
huaqianzkh5 小时前
反规范化带来的数据不一致问题的解决方案
数据库·系统架构
睿思达DBA_WGX5 小时前
Oracle Dataguard(主库为单节点)配置详解(1):Oracle Dataguard 工作原理
数据库·oracle
精神病不行计算机不上班5 小时前
【数据库系统概论】数据库恢复技术--复习
开发语言·数据库·oracle
加勒比之杰克5 小时前
【数据库初阶】MySQL数据类型
linux·数据库·mysql·数据类型·varchar
Libby博仙5 小时前
asp.net core webapi中的数据注解与数据验证
数据库·asp.net·.netcore
网络安全成叔5 小时前
【整理集合大全】MySQL(4) 数据库增删改查SQL语句
网络·数据库·sql·mysql·web安全·网络安全