初始Redis及其基础

初始Redis及其基础

  • Redis的核心知识点
  • Redis如何选择数据库
  • Redis的优点
  • Redis的下载和安装
    • window安装
    • Linux的安装
    • 可能会出现的问题
  • Redis的基本命令
    • 启动命令
    • 连接服务
    • 测试联通
    • 设置key
    • 获取key
    • 查看Redis目前使用的进程
    • 关闭服务
    • 判断key是否存在
    • 移除key
    • 设置key的保留时间
    • 查看Redis的key类型
  • Redis的String类型
    • 追加字符命令
    • 获取字符串长度命令
    • 增加步长命令
    • 获取key的指定位置的内容
    • 设置值的过期时间
    • 同时设置多个值
    • 同时获取多个值
    • 同时设置原子性锁
    • 设置json字符来保存一个对象
    • 其他使用场景
  • Redis的List类型
    • 放置操作
    • 获取操作
    • 移除操作
    • 通过下标获取值
    • 获取列表的长度
    • 移除指定的值
    • 修剪操作(通过下标进行操作)
    • 高级命令
      • rpopLpush
      • Lset命令
      • 插入命令Linsert
    • 小结
  • Set集合类型
    • 添加元素
    • 查看元素的所有值
    • 判断某一个值是不是在set集合中
    • 获取set集合中的内容个数
    • 移除set集合中的指定元素
    • 随机抽选出set集合的指定个数的元素
    • 随机删除key
    • 将一个指定的值,移动到另外一个set集合中
    • 小结
  • Hash哈希类型
    • 设置key,value
    • 设置多个key,value
    • 获取多个key,value
    • 获取全部数据
    • 删除指定的字段
    • 获取长度
    • 判读Hash是否存在
    • 只获取所有的field,不获取值
    • 设置自增,自减
    • 小结
  • Zset类型
    • 插入值
    • 排序如何实现
    • 移除元素
    • 获取个数
    • 获取指定区间的指定数量
    • 小结

Redis的核心知识点

1、redis默认有16个数据库,默认从第0个开始,这些都可以在redis.conf里面进行查看
2、redis默认不区分大小写

3、redis.conf文件是重点

Redis如何选择数据库

通过命令Select x来进行数据库的选择
初始Redis及其基础_第1张图片

Redis的优点

  1. Redis是单线程的!redis是非常快的,基于内存操作,CPU不是性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,就使用了单线程单线程操作了。
  2. Redis是将所有的数据全部放在内存中的,所以使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作),对于内存系统来说,如果没有上下文的切换效率就最高,多次读写都是在一个CPU上的,在内存情况下,这个就是最佳方案
  3. Redis是以纳秒为单位的

Redis的下载和安装

window安装

必须去GITHub进行下载,但是官方不建议你使用windows来操作Redis,原因是windows版本的Redis目前由微软公司独自维护,并且版本比较低,仅仅可用于简单的学习,国内访问GITHub也可能出现网络问题。
下载方法如下:
1、进入github搜索redis

https://github.com/microsoftarchive/redis/tags

初始Redis及其基础_第2张图片

2、进入之后
选择下载tar.gz解压即可使用
初始Redis及其基础_第3张图片
其中点击redis-server即可启动服务,redis-cli为模拟客户端来使用redis

Linux的安装

1、直接搜索官网链接

https://redis.io/

2、点击download下载即可
初始Redis及其基础_第4张图片
3、将压缩包复制到linux中进行解压安装即可
命令如下:

tar -xzvf  +redis 压缩包名
make (生成src文件夹)
make install 即可完成下载和安装

可能会出现的问题

1、make可能会出现错误
原因可能是由于你下载的Redis版本太高,而本身linux的gcc编译器版本太低,导致编译失败
Redis的5.0版本需要gcc 4.0以上的版本
Redis的6.0版本需要gcc 5.0以上的版本 (因此不建议最新版本的Redis,或者你可以去升级最新版的gcc)

2、Ubuntu的linux系统无法访问阿里云镜像的问题,在使用apt命令进行下载的时候会出现404的情况,这个原因很可能是由于虚拟机的网络配置和阿里云镜像地址有问题,可以自行百度解决,尝试替换阿里云镜像地址。

3、不同的Linux的虚拟机系统可能下载方式不太一样。

Redis的基本命令

启动命令

本人将redis-conf文件复制了一份到Hconfig文件夹下面,来方便于测试,大家也可以跟着一起创建文件夹

进入你下载的redis目录下面,使用如下命令

redis-server Hconfig/redis.conf

连接服务

redis-cli -p 6379 #这里的6379为端口号,可以自己到conf文件中进行修改,这里默认为6379

测试联通

127.0.0.1:6379> ping
PONG

得到pong回应说明连接成功

设置key

set name cjh

获取key

get name

结果如下

查看Redis目前使用的进程

ps -ef|grep redis

关闭服务

shutdown

判断key是否存在

EXISTS key

如果存在就返回1,否则返回0

移除key

move key 

成功就返回1,否则返回0

设置key的保留时间

expire   key   time

查看Redis的key类型

type key

Redis的String类型

前面已经在基本命令写了set和get命令,大部分学Redis的人最常使用的就是String类型的命令

追加字符命令

append key "aaaaa"

获取字符串长度命令

strlen key

增加步长命令

incrby key  len  #key为设置的键   len为你要增加的步长

获取key的指定位置的内容

getrange key  开始位置   结束位置

初始Redis及其基础_第5张图片

设置值的过期时间

setex(set with expire)#设置过期时间,默认已经存在

setnx(set if not exist) #如果不存在过期时间就设置过期时间,这个在分布式锁中常常使用,当key不存在时,就将key设置为value,并返回1,如果key存在,就返回0

setex key  过期time  值
setnx key  值

同时设置多个值

mset  k1 k2 k3 v1 v2 v3

初始Redis及其基础_第6张图片

同时获取多个值

mget k1 k2 k3

初始Redis及其基础_第7张图片

同时设置原子性锁

这里k4不存在,由于msetnx是一个原子性操作,因此要么同时成功,要么同时失败

msetnx k1 v1	k4 v4 

那么结果很显然就是返回0

设置json字符来保存一个对象

set user:1{name:zhangsan,age:3} #设置一个user:1,对象值为json字符来保存一个对象

因此,你也可以同时获取和输入
初始Redis及其基础_第8张图片

其他使用场景

计数器
统计多单位的数量
粉丝数
对象缓存存储

Redis的List类型

前言:在Redis中,我们可以把list玩成栈或者阻塞队列

所有的List命令都是以L开头的

可以把list想象成一个排队的队伍,可以从前面排,也可以从后面排

放置操作

LPUSH list key   #从左边放
Rpush list key  #从右边放

获取操作

LRANGE list 开始位置  结束位置

初始Redis及其基础_第9张图片

移除操作

Lpop list #移除list的第一个元素
Rpo list  #移除list的最后一个元素

通过下标获取值

lindex list  1 #获取list中下标为1的元素的值

获取列表的长度

Llen list

移除指定的值

Lrem key  数量(因为一个key可以有多个重复的)  值

修剪操作(通过下标进行操作)

Ltrim  key  1  2

初始Redis及其基础_第10张图片
这里我放了多个值,但是通过修剪操作,可以修剪掉其他的。

高级命令

rpopLpush

移除当前列表中的最后一个元素,并将它移动到新的列表中,如果新的列表没有创建会自动创建

rpoplpush   +  当前列表的名字+  新的列表的名字

Lset命令

将列表中指定下标的值替换为另外一个值,相当于更新操作,注意:列表需要存在,下标的值也要存在,否则都会报错

Lset list 下标  值

插入命令Linsert

在列表中的某一个值的前面或者后面插入一个值

LINSERT key BEFORE|AFTER pivot value

将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

小结

小结:他实际上是一个链表,before Node after ,left,right都可以插入值
如果key不存在,创建新的链表
如果key存在,新增内容
如果移除了key,则为空链表,也代表不存在
在两边插入或者改动值,效率最高!中间元素,相对来说,效率会低一点

Set集合类型

添加元素

sadd key value

查看元素的所有值

smembers key

判断某一个值是不是在set集合中

sismembers key value

获取set集合中的内容个数

scard key

移除set集合中的指定元素

srem   key   value

随机抽选出set集合的指定个数的元素

SRANDMEMBER  key   count

随机删除key

spop key

将一个指定的值,移动到另外一个set集合中

smove key1  key2   value  #将一个指定的值,从key1移动到key2

小结

set 是无序不重复集合

微博,B站,共同关注(并集)
数字集合类:
*
差集 SDIFF
*
交集 SINTER
*
并集 SUNION
初始Redis及其基础_第11张图片

初始Redis及其基础_第12张图片
实际作用:
在这里插入图片描述

Hash哈希类型

前言:所有的命令以H开头,跟字符串类型的差不多,本质和String类型没有太大的区别,还是一个简单的key-value

Map集合,key-Map集合! ,这个时候的这个值是一个map集合

设置key,value

hset  myhash field1  value

设置多个key,value

hmset  myhash field1  value1  field2  value2

获取多个key,value

hmget myhash field1 field2

获取全部数据

hgetall myhash

删除指定的字段

hdel myhash field1

获取长度

hlen myhash

判读Hash是否存在

Hexists myhash field1

只获取所有的field,不获取值

hkeys myhash

设置自增,自减

Hincrby myhash field  增加/减少的值

小结

主要的应用场景:
存储变更数据 (尤其是用户信息的保存,经常变动的信息)

hash更适合于对象的存储

String更适合字符串存储

Zset类型

前言:
最大的作用就是排序

插入值

zset  k1 score1 v1

初始Redis及其基础_第13张图片

排序如何实现

看下面,这里分别给三名用户 赋予不同的工资,然后按照从小到大的顺序来进行排序
初始Redis及其基础_第14张图片
这里也可以附带上值
初始Redis及其基础_第15张图片

ZRANGEBYSCORE  key min  max   #将key的最小到最大值根据成绩进行排序
ZREVRANGE  # key min max 将key的值从大到小进行排序

移除元素

zrem salary xiaohong  #移除rem中的元素

获取个数

zcard   salary  #获取有序集合中的个数 

获取指定区间的指定数量

zcount  salary  1  2   #获取1到2的区间的数量

小结

应用场景

set排序,存储班级成绩表,工资排序表
普通消息,1,重要消息,2,带权重进行判断
排行榜功能的实现,取Top  N测试

你可能感兴趣的:(Redis基础专栏,redis,数据库,nosql)