Redis基础篇(1)——环境搭建和数据类型

本文介绍了Redis的安装过程,包括通过官网下载、编译安装和使用包管理器安装。详细讲解了Redis的启动与关闭方法,以及其默认端口、数据库数量和单线程特性。此外,还概述了Redis的基础命令,如选择数据库、查看键、设置过期时间和数据类型管理。最后,详细阐述了Redis的四种基本数据类型:String、List、Set和Hash,包括它们的常用操作和内部实现机制。
摘要由CSDN通过智能技术生成

一、简介

1.安装

Redis官网地址
Redis中文官网地址
Redis的版本号第二位为奇数,表示非稳定版本。偶数为稳定版本。
安装步骤特别简单,只需要下载压缩包(可以直接在官网下载或者通过wget下载)

依次执行下面命令即可
$ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
$ tar xzf redis-6.2.6.tar.gz
$ cd redis-6.2.6
$ make
$ make install

redis默认安装路径 use/local/bin,主要有以下几个可执行文件。

  • redis-server Redis服务器启动命令
  • redis-cli 客户端,操作入口

2.安装包方式

  去redis官网下载redis安装包:https://redis.io/

在这里插入图片描述
  redis大多数情况下是在linux系统上使用,下载的压缩包也是linux系统的压缩包。我们可以使用WinSCP工具将下载的压缩包放到服务器或者虚拟机上。

在这里插入图片描述
  安装gcc。centos的系统使用yum install gcc,安装过程中有提示就全选y。安装完成后,输入gcc --version,显示以下内容即安装完成。在这里插入图片描述
  解压redis压缩包,tar -zxvf xxxx.tar.gz。解压完成后,会在当前目录中生成一个redis目录,进入该目录,输入make,没有报错即编译完成。
在这里插入图片描述
  在当前目录输入make install进行安装在这里插入图片描述
  安装完成后,会自动在/usr/local/bin目录下生成6个文件
在这里插入图片描述

  • redis-benchmark:性能测试工具
  • redis-check-aof:修复有问题的aof文件
  • redis-check-dump:修复有问题的dump.rdb文件
  • redis-sentinel:redis集群使用
  • redis-server:redis服务器启动命令
  • redis-cli:客户端,操作入口

以上便完成了redis的安装,启动redis有两种方式:
1、前台启动,
  在命令行输入redis-server即可启动,关闭时输入exit或者ctrl + c。这种启动方式的缺点是当你终端关闭时,redis也会关闭。
2、后台启动。
  (1)首先进入刚开始解压缩生成的redis-xxx目录中,在该目录中有一个redis.conf文件。
  (2)输入cp redis.conf /etc/redis.conf,将文件复制到etc目录下。
  (3)使用vim修改etc下的redis.conf文件,找到daemonize修改其为yes,然后保存退出。
在这里插入图片描述
  (4)最后进入/usr/local/bin目录,输入redis-server /etc/redis.conf,后台启动完成。
3、输入redis-cli命令即可连接redis服务,要想关闭redis后台服务,可以在redis-cli中输入shutdown关闭后台服务,想退出redis-cli,可以使用exit退出。

3.Redis服务启动关闭

前台启动

直接在相应目录下执行redis-serve命令

后台启动

① 拷贝一份redis.conf到其他目录
② 修改redis.conf中的daemonize no(128行)改为yes
③ redis-server /路径/redis.conf

服务关闭

① redis-cli -p 端口号 shutdown
② ps -ef | grep redis
kill -9 进程号

3.基础介绍

① redis的默认端口号是6379。
② redis默认有16个数据库,从0-15。
③ redis采用单线程+多路IO复用

二、redis的全局命令

1.基本使用命令

  1. select 2   切换数据库
  2. flushdb   清空当前库
  3. flushall   清空全部库

2.key全局命令

  1. dbsize   查看当前库有多少key
  2. keys *   查看当前库所有key,支持模糊查询,例如key *ool,可以查到所有ool结尾的key
  3. type key1   查看key1的数据类型
  4. exists key1   判断key1是否存在
  5. expire key1 10   为key1设置10s过期时间
  6. ttl key1 查看key1还有多少秒过期,-1表示永不过期,-2表示已过期
  7. del key 删除指定key unlink key 非阻塞删除key

3.配置相关命令

  1. info clients 查看redis当前连接数
  2. config get maxclients 查看redis最大连接数

三、redis的基本数据类型

1.String类型

String类型是二进制安全的,意味着Redis的string可以包含任何数据,比如图片等。一个Redis中字符串value最多可以是512M。

  1. set <key> <value>   添加键值对
  2. get <key>   通过key获取value
  3. append <key> <value>   将给定的value追加到原值的末尾,如果没有就新建
  4. strlen <key>   获取对应value的长度
  5. setnx <key> <value>   当key不存在时,添加键值对
  6. incr <key> 将key中存储的数值加1.如果为空,则新增值为1
  7. decr <key> 减一,如果为空,则新增值为-1
  8. incrby/decrby <key> <步长> 将key中的数字值增减步长
  9. mset/msetnx <key> <value> <key> <value> 同时多个key,value。mset任意一个存在则失败。
  10. setex <key> <过期时间> <value> set的同时设置过期时间
  11. getset <key> <value> 获取旧值,同时用新值覆盖

String字符串小于1M时,扩容都是加倍现有空间。如果超过1M,扩容时一次只会多扩1M空间。字符串最大长度为512M

2.List类型

redis的列表是简单的字符串列表,可以添加一个元素到头部或尾部。底层是双向链表,对两端的操作性很高,通过索引下标操作中间节点性能较差。
lpush/rpush <key> <value1> <value2> <value3> 从左边/右边插入一个或多个值。例如从左边放入v1,v2,v3。存放的顺序是v3,v2,v1
lpop/rpop <key> 从左边/右边吐出一个值
rpoplpush <key1> <key2> 从key1列表右边吐出一个值,插到key2列表左边。
lrange <key> <start> <stop> 按照索引下标获得元素(从左往右)
lindex <key> <index> 按照索引下标获得元素(从左往右)
llen <key> 获取列表长度
linsert <key> before/after <value> <newvalue> 在value的后面插入newvalue
lrem <key> <n> <value> 从左边删除n个value(从左往右)
lset <key> <index> <value> 将列表key下标为index的值替换成value

list的数据结构为快速链表quickList。
在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表。
当数据量较多时会将多个ziplist改成quicklist。
因为普通链表需要附加的指针空间太大,redis将链表和ziplist结合起来组成quicklist。这样既满足了快速插入删除,又不会出现太大的空间冗余。

3.Set类型

Redis的Set是string类型的无序不重复集合,底层是一个value为null的hash表。
常用
sadd <key> <value1> <value2> <value3> 将一个或多个member元素加入到结合key中,已经存在的元素被忽略。
smembers <key> 取出该集合所有值
sismember <key> <value> 判断集合key种是否含有该value值,有为1没有为0
scard <key> 返回该集合中元素的个数
srem <key> <value1> <value2> 删除集合中某几个元素
不常用
spop <key> 随机从该集合中吐出一个值,集合中删除该元素。
srandmember <key> <n> 随机从该集合中取出n个值,不会从集合中删除
smove <source> <destination> value 把集合中一个值从一个集合source移动到另一个集合destination。
sinter <key1> <key2> 返回两个集合的交集元素
sunion <key1> <key2> 返回两个集合的并集元素
sdiff <key1> <key2> 返回两个集合中的差集元素,key1中有的但是key2中没有的。

Set底层是通过HashMap实现的。HashMap的key是非重复而且随机的。将HashMap所有的value都指向同一对象。他的添加删除查找复杂度都是o(1),也就是说对着数据的增加,查找数据的时间不变。

4.hash类型

相当于一个key,可以存一个hashmap<field,value>。

  1. hset <key> <field> <value> 给key中的field键赋值value
  2. hmset <key1> <field1> <value1> <field2> <value2> .... 批量设置hash的值,4.0后hset也能实现此功能
  3. hget <key1> <field> 从key1中取出field的value
  4. hgetall <key1> <field> 获取该key下所有的键值
  5. hexists <key1> <field> 查看哈希表key中,给定阈field是否存在。
  6. hkeys <key> 列出该hash集合所有的field
  7. hvals <key> 列出该hash集合所有的value
  8. hincrby <key> <field> <increment> 为哈希表key中所有的field的值增减increment
  9. hsetnx <key> <field> <value> 将哈希表key中field键值设为value,仅仅当field不存在时成功

当field-value长度较短且个数较少时,使用压缩列表,否则使用hashtable。

5.有序集合Zset

Redis有序集合zset是一个没有重复元素的字符串集合。它的每个成员关联了一个评分(score),这个评分被用来按照从最低分到最高分排列集合中的成功。评分可以重复。

  1. zadd <key> <score1> <value1> <score2> <value2> 将一个或多个元素和评分加入到集合中
  2. zrange <key> <start> <stop> [WITHSCORES] 返回有序集合中,下标(按照分数从小到大排序,第一个元素为0,第二个元素为1…)在start-stop之间的元素。带WITHSCORES可以让分数和值一起返回
  3. zrangebyscore <key> <min> <max> [WITHSCORES] [limit offset count] 返回有序集合key中,所有score值介于min和max之间(包括等于)的成员,成员按score值从小到大次序排列
  4. zrevrangebyscore key <max> <min> [WITHSCORES] [limit offset count] 从大到小排列
  5. zincrby <key> <increment> <value> 为元素的score加上增量
  6. zrem <key> <value> 删除该集合下,指定值的元素
  7. zcount <key> <min> <max> 统计该分数区间内的元素个数
  8. zrank <key> <value> 返回该值在集合中的排名,从0开始

SortedSet(zset)是redis提供的一个特别的数据结构,一方面等价于java的数据结构Map<String,Double>,可以给每一个value赋予一个权重score,另一方面又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
zset底层使用两个数据结构:

  • hash,hash的作用就是关联value和权重score,保障value的唯一性。可以通过元素value 找到对应的score值。

  • 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值