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,输出如下代表我们安装成功了

1.1.2 redis启动

切换到src目录下

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

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

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

 

再打开一个标签,运行./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的配置,

1.2.2 redis的启动

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

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

 

第二章 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

或者修改配置文件,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在启动时默认用的是第零个空间.我们打开配置文件,可以看见其写着database 16.表示我们可以用0-15号空间.

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

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

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

dbsize是查看key的个数

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

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

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

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

type可以查看值的类型:

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

 

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

 

第四章 redis数据结构

4.1 string字符串

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

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

 获得string值的一个区间

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

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

mget获取一个或多个value

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

strlen获取字符串的长度.

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

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

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

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

 

4.2 哈希hash

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

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

hgetall 是获得map里所有的值

heys是获得map里面所有的key

hvals获得map里面所有的value

hlen获得map里keys的数量

获取指定的key的value

一次设置多个key value

一次删除多个key

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

 

4.3 列表list

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

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

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

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

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

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

 

4.4 集合set

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

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

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

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

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

smembers可以查看元素成员.

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

sinter是求两个集合的交集

sunion是求两个集合的并集

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

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

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

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

 

4.5 有序集合sortset

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

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

zcard查询sortset中元素的个数.

zscore查看sortset中元素的分数.

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

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

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

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

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值