前言:本文章为慕课网上Java企业级电商项目架构演进之路Tomcat集群与Redis分布式的学习笔记.供本人复习之用.
目录
3.2 flushdb,bsize,del,exists,ttl,expire,type,rename
第一章 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就能从返回值里获取对应的分数.