Redis基础讲解

前言:本文章为慕课网上Java企业级电商项目架构演进之路Tomcat集群与Redis分布式的学习笔记.供本人复习之用.

目录

第一章 redis的安装与启动

1.1 linux中redis的安装与启动

1.1.1 redis安装

1.1.2 redis启动

1.2 windows中redis的安装与启动

1.2.1 redis的安装

1.2.2 redis的启动

第二章 Redis服务启动退出的各种方式

2.1 save命令

2.2 redis切换服务端口

2.2.1 服务端以6380端口提供服务

2.2.2 客户端以6380端口进行连接

2.2.3 指定端口退出

2.3 操作远程redis服务

2.3.1 连接远程redis服务

2.3.2 关闭远程redis服务

2.4 密码配置

第三章 redis的基础命令

3.1 keyspace

3.2 flushdb,bsize,del,exists,ttl,expire,type,rename

第四章 redis数据结构

4.1 string字符串

4.2 哈希hash

4.3 列表list

4.4 集合set

4.5 有序集合sortset


 

第一章 redis的安装与启动

1.1 linux中redis的安装与启动

1.1.1 redis安装

我们的linux系统是centos7.3

下载解压:

进入目录,输入make命令回车,开始安装,安装完后输入make test进行测试.在这里它显示

You need tcl 8.5 or newer in order to run the Redis test

我们运行yum install tcl,然后继续运行make test,输出如下代表我们安装成功了

Redis基础讲解_第1张图片

1.1.2 redis启动

切换到src目录下

 输入ll | grep redis-,最后面带x的就是可以执行的.我们需要关注的其实就是redis-cli和redis-server

Redis基础讲解_第2张图片

我们要先执行redis-server,再执行client.

输入./redis-server开启redis服务,开启后图如下,可以看到对外提供的端口是6379,我们的java程序使用redis服务时,就需要用6379的端口.这表明我们的redis服务已经打开,这里我们打开了redis服务后就不能输入别的东西了,如果想让其在后台运行只需在运行命令后面加一个&即./redis-server &

 

Redis基础讲解_第3张图片

再打开一个标签,运行./redis-cli,显示如下,则说明已经进入了redis数据库.

1.2 windows中redis的安装与启动

1.2.1 redis的安装

 打开如下地址,选择3.21版本的

https://github.com/MicrosoftArchive/redis/releases

选择zip版本,并解压,打开dos,进入所在文件夹,redis-server是服务端,redis-cli是客户端,下面的两个conf是redis的配置,

Redis基础讲解_第4张图片

Redis基础讲解_第5张图片

1.2.2 redis的启动

输入redis-server.exe就可以启动服务.

Redis基础讲解_第6张图片

再打开一个窗口,进入redis文件夹,输入redis-cli就可以运用服务了.

Redis基础讲解_第7张图片

 

第二章 Redis服务启动退出的各种方式

操作在linux环境下

2.1 save命令

我们在客服端set一个值,当我们按ctrl+c停止服务时,发现set的值并没有存储到redis中.因为我们是终止的服务,redis在shutdown时会进行持久化,我们直接终止就不会进行持久化了,我们可以调用save可以人为的让redis进行持久化,这个时候我们再终止服务,数据也会进入到redis中.

正确的执行命令是./redis-cli shutdown

2.2 redis切换服务端口

2.2.1 服务端以6380端口提供服务

./redis-server --port 6380

Redis基础讲解_第8张图片

或者修改配置文件,vim redis.conf,进去conf后可以按/port进行搜索.

找到port 6379,替换为6380.

然后以./redis-server ../redis.conf进行启动

 

2.2.2 客户端以6380端口进行连接

./redis-cli -p 6380 shutdown

2.2.3 指定端口退出

./redis-cli -p 6380 shutdown

2.3 操作远程redis服务

如果版本是3.2以上,默认是只允许在本地操作的,如果远程连接会提示如下

DENIED Redis is running in protected mode because protected mode is enabled

参考:https://blog.csdn.net/Agly_Clarlie/article/details/52251746

解决问题需要以下两步.

1.我们需要修改配置文件../redis.conf 

# bind 127.0.0.1

2.在redis.conf中设置保护模式为no

protected-mode no

最后以配置文件启动即可(如果不指定配置文件会读取默认配置)

./redis-server ../redis.conf

 

2.3.1 连接远程redis服务

./redis-cli -p 6379 -h 127.0.0.1(ip)

2.3.2 关闭远程redis服务

./redis-cli -p 6379 -h 127.0.0.1 shutdown

2.4 密码配置

进入配置文件,删除注释,并修改成如下,启动服务端

客户端连接的时候,要输入-a后面接上密码. 

 

第三章 redis的基础命令

打开client输入info可以查看系统信息

server:version代表redis版本,gcc代表依赖的版本,process_id代表进程的id号,tcp_port代表端口.

client:connected_clients代表连接的客户端数

memory使用内存.

persistence持久化的一些参数.

stats各种状态.

replication主从同步相关的数据.

3.1 keyspace

可以看到db0有四个keys,db10有一个keys.

Redis基础讲解_第9张图片

redis在启动时默认用的是第零个空间.我们打开配置文件,可以看见其写着database 16.表示我们可以用0-15号空间.

通过select可以选择要操作的是几号空间.

Redis基础讲解_第10张图片

3.2 flushdb,bsize,del,exists,ttl,expire,type,rename

flushdb是清除当前的space.fluashall是清除所有的.

dbsize是查看key的个数

del 为删除某个key,具体为del key

exists为判断某个key是否存在,返回值是1表示存在,返回值0表示不存在.

Redis基础讲解_第11张图片

ttl:time to live,返回-1表示key没有过期时间(永久),-2表示已经过期

Redis基础讲解_第12张图片

expire可以设置key的存在时间,设置a的存在时间为10s.expire可以设置session的有效期.

Redis基础讲解_第13张图片

type可以查看值的类型:

Redis基础讲解_第14张图片

rename:对key进行重命名,值得一提的是,如果rename的值和某个已存在的值是相同的,那么会覆盖已存在的值.

Redis基础讲解_第15张图片

 

另外redis中有许多以nx结尾的命令,以nx结尾的命令都是比较特殊的,里面都会有一些判断的逻辑,以nx结尾的命令在实际的生产环境会经常用到,比如这里我们如下图所示用renamenx a b就不会生效,因为b已经存在.

Redis基础讲解_第16张图片

 

第四章 redis数据结构

4.1 string字符串

setex可以设置key的时间,下图是设置key的存在时间为100s.

Redis基础讲解_第17张图片

psetex设置key存在的时间为多少毫秒, 下图是设置key的时间为10s

Redis基础讲解_第18张图片

 获得string值的一个区间

Redis基础讲解_第19张图片

getset 先get再set,主要是在set值的时候能通过设置新的值拿到老的值.

Redis基础讲解_第20张图片

mset 同时设置一个或多个,后面是key value,key value,key value

Redis基础讲解_第21张图片

mget获取一个或多个value

Redis基础讲解_第22张图片

 setnx 当且只有set的key不存在时才能成功,如果存在则不会成功.

Redis基础讲解_第23张图片

strlen获取字符串的长度.

Redis基础讲解_第24张图片

msetnx 也是设置多个key,但是如果有一个key存在,就都不会成功.msetnx和事务就比较接近了,要么都成功,要么都失败.下图是key q是存在的所以msetnx就都失败了.

incr 可以使数值value加1,也可以通过incrby直接加指定数值.

Redis基础讲解_第25张图片

Redis基础讲解_第26张图片

同样decr是 1减少1,decrby 1 100是减少100.

Redis基础讲解_第27张图片

append是追加字符串.直接追加到value的末尾.

Redis基础讲解_第28张图片

 

4.2 哈希hash

hset代表处理哈希,hset后面跟着的是map,map中有一个key叫name,value是jim.

hexists判断是否存在,hget获得存在的key的value.

Redis基础讲解_第29张图片

hgetall 是获得map里所有的值

Redis基础讲解_第30张图片

heys是获得map里面所有的key

Redis基础讲解_第31张图片

hvals获得map里面所有的value

Redis基础讲解_第32张图片

hlen获得map里keys的数量

Redis基础讲解_第33张图片

获取指定的key的value

Redis基础讲解_第34张图片

一次设置多个key value

Redis基础讲解_第35张图片

一次删除多个key

Redis基础讲解_第36张图片

hset也可以设置key,但是如果key已存在,则不会设置

 

4.3 列表list

和java中的list很相近,里面允许重复值.

通过lpush创建list,llen查看list的长度.

Redis基础讲解_第37张图片

lrange查看list某个区间的值,可以看到和push的顺序相反,所以它是将值加在list的头部.

Redis基础讲解_第38张图片

可以指定索引来设置list的值.

Redis基础讲解_第39张图片

查看第5与第0个位置元素的值.

Redis基础讲解_第40张图片

lpop list移除第一个元素,rpop移除最后一个元素.

Redis基础讲解_第41张图片

 

4.4 集合set

set是一个无序的集合.里面可以排除重复,redis里的set是通过hash来实现的,所以redis里查找删除的时间复杂度都是O(1).

sadd可以创建一个set并向其中添加元素

Redis基础讲解_第42张图片

因为其不可以重复,所以我们再set一个a,就会失败.

scard set可以看set里面有多少个值

我们创建一个集合set1里面是a,b,c,d ,set2里面是c,d,e,f.

smembers可以查看元素成员.

Redis基础讲解_第43张图片

sdiff是求两个集合的差集,第一个就是set1-set2.其实就是第一set减去两个ser的交集.

Redis基础讲解_第44张图片

sinter是求两个集合的交集

Redis基础讲解_第45张图片

sunion是求两个集合的并集

Redis基础讲解_第46张图片

返回集合中一个或多个随机数,下图是返回两个随机数

Redis基础讲解_第47张图片

sismember判断是否是set中的成员元素

移除集合中一个或多个成员,移除set1中的a,b

Redis基础讲解_第48张图片

spop移除并返回集合中的某个随机元素

Redis基础讲解_第49张图片

 

4.5 有序集合sortset

它比set集合高级的地方是它可以保证顺序,通过分数来保证顺序,它的增删查改的复杂度都是O(1),因为是通过hash实现的.非常像java中的linkhashset(保证顺序,排除重复).

创建有序集合sortedset1 ,且a是100分,b是200分,c是300分.

Redis基础讲解_第50张图片

zcard查询sortset中元素的个数.

zscore查看sortset中元素的分数.

Redis基础讲解_第51张图片

zcount查看某个分数段的数的个数

Redis基础讲解_第52张图片

zrank返回集合中指定元素的索引

Redis基础讲解_第53张图片

zincrby给sortset中的某个元素增加分数,下图是给a增加1000分.加完之后看到a的索引变成了2(从0开始).

Redis基础讲解_第54张图片

里面的元素是不能重复的,分数是可以重复的.

zrange可以取一个范围的元素,下图是取0到100(闭区间)个元素.加上withscores就能从返回值里获取对应的分数.

Redis基础讲解_第55张图片

Redis基础讲解_第56张图片

 

 

 

 

 

你可能感兴趣的:(Redis)