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

一、简介

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基础篇(1)——环境搭建和数据类型_第1张图片
  redis大多数情况下是在linux系统上使用,下载的压缩包也是linux系统的压缩包。我们可以使用WinSCP工具将下载的压缩包放到服务器或者虚拟机上。

Redis基础篇(1)——环境搭建和数据类型_第2张图片
  安装gcc。centos的系统使用yum install gcc,安装过程中有提示就全选y。安装完成后,输入gcc --version,显示以下内容即安装完成。Redis基础篇(1)——环境搭建和数据类型_第3张图片
  解压redis压缩包,tar -zxvf xxxx.tar.gz。解压完成后,会在当前目录中生成一个redis目录,进入该目录,输入make,没有报错即编译完成。
Redis基础篇(1)——环境搭建和数据类型_第4张图片
  在当前目录输入make install进行安装Redis基础篇(1)——环境搭建和数据类型_第5张图片
  安装完成后,会自动在/usr/local/bin目录下生成6个文件
Redis基础篇(1)——环境搭建和数据类型_第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,然后保存退出。
Redis基础篇(1)——环境搭建和数据类型_第7张图片
  (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   添加键值对
  2. get   通过key获取value
  3. append   将给定的value追加到原值的末尾,如果没有就新建
  4. strlen   获取对应value的长度
  5. setnx   当key不存在时,添加键值对
  6. incr 将key中存储的数值加1.如果为空,则新增值为1
  7. decr 减一,如果为空,则新增值为-1
  8. incrby/decrby <步长> 将key中的数字值增减步长
  9. mset/msetnx 同时多个key,value。mset任意一个存在则失败。
  10. setex <过期时间> set的同时设置过期时间
  11. getset 获取旧值,同时用新值覆盖

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

2.List类型

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

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

3.Set类型

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

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

4.hash类型

相当于一个key,可以存一个hashmap

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

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

5.有序集合Zset

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

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

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

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

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

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