redis

x33g5p2x  于2021-11-21 转载在 Redis  
字(7.4k)|赞(0)|评价(0)|浏览(233)

后台启动:redis-server &
默认端口号:6379
关闭redis:./redis-cli shutdown(推荐) 第二种,杀掉进程 ps -ef | grep redis kill PID

服务启动后还要启动客户端:
1.命令行,./redis-cli-h 127.0.0.1 -p 6379
2.rdm,一个cpp写的图形化客户端。远程客户端,通过网络访问redis,首先linux有防火墙,
其次redis有安全策略,默认情况下,只有安装redis的服务器才能访问redis(本机访问),启动redis
时要带着这个配置文件,因为默认redis启动时不加载这个配置文件,既然你改了,你得让redis知道
进入到src中,./redis-server …/redis.conf &(每次)。配置文件改两处,1.bind 127.0.0.1 注释掉
2.protected-mode改成no (命令模式按/bind,进行搜索,n指下一个)
3.编程客户端,用的是Jedis

常用命令

Redis沟通命令,查看状态
redis >ping 返回PONG
解释:输入ping,redis给我们返回PONG,表示redis服务运行正常

Redis默认使用16个库,从0到15。 对数据库个数的修改,
在redis.conf文件中databases 16,理论上可以配置无限多个

切换库命令:select db
默认使用第0个,如果要使用其他数据库,命令是 select index

查看当前数据库中key的数目:dbsize

清空当前库:flushdb

操作key的命令
1.keys * 显示当前库所有的key,keys ?,

2.exists key [key…]
作用:判断key是否存在
返回值:整数,存在key返回1,其他返回0。使用多个key,返回存在的key的数量

3.expire key seconds
作用:设置key的生存时间,超过时间,key自动删除。单位是秒。
返回值:设置成功返回数字 1,其他情况是 0

4.:ttl key
作用:查看key的剩余生存时间(ttl: time to live),以秒为单位。
返回值:
 -1 :没有设置key的生存时间, key永不过期。
 -2:key不存在

5.type key
作用:查看key所存储值的数据类型
返回值:字符串表示的数据类型

6.del key
作用删除key

redis的数据类型

1.string
2.hash–相当于map
3.list
4.set
5.zset(有序的集合)

数据类型的操作命令
1.string
1)set
2)get
3)incr,操作key值,增加1,相当于i++,如果不存在默认初值为0,只能是整形
4)decr,相当于i–,如果不存在也是默认为0
5)append,追加到value值后面返回多少个字符,append k5,如果没有,就相当于set

1)strlen,如果key存在,返回字符串长度
2)getrange key start end,获取 key 中字符串值从 startIndex 开始到 endIndex 结束的子字符串,
包括startIndex和endIndex,负数表示从字符串的末尾开始,-1 表示最后一个字符。
3)setrange,setrange key offsetIndex value用value覆盖key的存储的值从offset开始。
返回值:修改后的字符串的长度。
4)mset key value [key value…]
功能:同时设置一个或多个 key-value 对
返回值:设置成功,返回OK。
5)mget key [key …]
功能:获取所有(一个或多个)给定 key 的值
返回值:包含所有key的列表,如果key不存在,则返回nil

2.hash
1)hset hset website baidu www.baidu.com
将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。
返回值:返回设置成功的键值对个数
2)hget hget website baidu
获取哈希表 key 中给定域 field 的值
3)hmset key field value [field value…]
功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.
返回值:设置成功返回ok,如果失败返回一个错误。
4)hmget key field [field…]
功能:获取哈希表 key 中一个或多个给定域的值
返回值:返回和field顺序对应的值,如果field不存在,返回nil
5)hgetall key
功能:获取哈希表 key 中所有的域和值
返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash
6)hdel key field [field…]
功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。
返回值:成功删除的field的数量。
7)hkeys key
功能:查看哈希表 key 中的所有field域列表
返回值:包含所有field的列表,key不存在返回空列表
8)hvals key
功能:返回哈希表 中所有域的值列表
返回值:包含哈希表所有域值的列表,key不存在返回空列表。
9)hexists key field
功能:查看哈希表 key 中,给定域 field 是否存在

3.list
1)lpush key value [value…]
功能:将一个或多个值 value 插入到列表 key 的最左边(表头),各个value值依次插入到表头位置。
返回值:插入之后的列表的长度

lpush list a b c---->[c b a],每次插入都是从左边开始

2)rpush key value [value…]
功能:将一个或多个值 value 插入到列表 key 的最右边(表尾),各个 value 值按依次插入到表尾。
返回值:插入之后的列表的长度。

3)lrange key startIndex endIndex
功能:获取列表 key 中指定下标区间内的元素,下标从0开始,到列表长度-1;
下标也可以是负数,表示列表从后往前取,-1表示倒数第一个元素,-2表示倒数第二个元素,
以此类推;startIndex和endIndex超出范围不会报错。
返回值:获取到的元素列表

lrange lang 0 -1

4)lindex key index
功能:获取列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。
0 表示列表的第一个元素,1 表示列表的第二个元素;index也可以负数的下标,
-1 表示列表的最后一个元素

5)llen key
功能:获取列表 key 的长度
返回值:数值,列表的长度;key不存在返回0

6)lrem key count value
功能:根据参数 count 的值,移除列表中与参数 value 相等的元素,
count >0 ,从列表的左侧向右开始移除;
count < 0 从列表的尾部开始移除;
count = 0移除表中所有与 value 相等的值。
返回值:数值,移除的元素个数

7)lset key index value
功能:将列表 key 下标为 index 的元素的值设置为 value。
功能:设置成功返回ok ; key不存在或者index超出范围返回错误信息。

8)linsert key before/after pivot value
功能:将值 value 插入到列表 key 当中位于值 pivot 之前或之后的位置。key不存在或者pivot不在列表中,不执行任何操作。
返回值:命令执行成功,返回新列表的长度。没有找到pivot返回 -1, key不存在返回0。
pivot 参考值

4.set
1)sadd key member [member…]
功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
返回值:加入到集合的新元素的个数(不包括被忽略的元素)
2)smembers key
功能:获取集合 key 中的所有成员元素,不存在的key视为空集合。
返回值:返回指定集合的所有元素集合,不存在的key,返回空集合。
3)scard key
功能:获取集合里面的元素个数
返回值:数字,key的元素个数。其他情况返回 0
4)sismember key member
功能:判断 member 元素是否是集合 key 的元素
返回值:member是集合成员返回1,其他返回 0
5)srem key member [member…]
功能:移除集合中一个或多个元素,不存在的元素被忽略。
返回值:数字,成功移除的元素个数,不包括被忽略的元素
6)srandmember key[count]
功能:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中;
提供了count时,count 正数, 返回包含count个数元素的集合,集合元素各不重复。
count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。
返回值:一个元素或者多个元素的集合
7)spop key[count]
功能:随机从集合中删除一个或count个元素。
返回值:被删除的元素,key不存在或空集合返回nil

5.zset
1)zadd key score member [score member…]
功能:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,
如果member存在集合中,则覆盖原来的值;score可以是整数或浮点数.
返回值:数字,新添加的元素个数
score可以重复,根据menber字母表排,从小到大

2)zrange key startIndex endIndex [WITHSCORES]///zrevrange
功能:查询有序集合,指定区间的内的元素。集合成员按score值从小到大来排序;
startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推;
startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;
WITHSCORES选项让score和value一同返回。
返回值:指定区间的成员组成的集合

3)zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]///zrevrangebyscore
功能:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括min和max)的成员,
有序成员是按递增(从小到大)排序
min,max可以用-inf,+inf
limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。
返回值:指定区间的集合数据

4)zrem key member [member…]
功能:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。
返回值:被成功删除的成员数量,不包括被忽略的成员

5)zcard key
作用:获取有序集 key 的元素成员的个数。
返回值:key存在,返回集合元素的个数; key不存在,返回0

6)zcount key min max
功能:返回有序集 key 中, score 值在 min 和 max 之间(包括 score 值等于 min 或 max )的成员的数量。
返回值:指定有序集合中分数在指定区间内的元素数量

事务:

redis没有回滚,具体看2)
Redis事务的常用命令:
1)multi
功能:用于标记事务块的开始。Redis会将后续的命令逐个放入队列中,然后才能使用EXEC命令原子化地执行这个命令序列。
返回值:开启成功返回OK
2)exec
功能:在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。
如果在把命令压入队列的过程中报错,则整个队列中的命令都不会执行,执行结果报错;
如果在压队列的过程中正常,在执行队列中某一个命令报错,则只会影响本条命令的执行结果,其它命令正常运行
3)discard
清除所有先前在一个事务中放入队列的命令,并且结束事务。
如果使用了WATCH命令,那么DISCARD命令就会将当前连接监控的所有键取消监控。
返回值:清除成功,返回OK。

4)watch key [key …]
功能:当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的。如果被监控的key值在本事务外有修改时,则本事务所有指令都不会被执行。Watch命令相当于关系型数据库中的乐观锁。
返回值:监控成功,返回OK。

5)unwatch
功能:清除所有先前为一个事务监控的键。
如果在watch命令之后你调用了EXEC或DISCARD命令,那么就不需要手动调用UNWATCH命令。
返回值:清除成功,返回OK

持久化

两种方式:
RDB(Redis DataBase)是 Redis 默认的持久化方案。在指定的时间间隔内,
执行指定次数的写操作,则会将内存中的数据写入到磁盘中(二进制形式)。即在指定目录下生成一个dump.rdb文件。
Redis重启会通过加载dump.rdb文件来恢复数据
配置redis.conf:
1)生成快照的时机,在n秒内至少有多少个key改动 save (搜索snap)
2) dbfilename:设置RDB的文件名,默认dump.db
3)dir:指定RDB文件的位置,默认当前目录(src中)
缺点:保存会有条件,可能会丢失数据
优点:性能好

AOF(Append Only File),Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),
所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启会根据日志文件的内容将写
指令从前到后执行一次以完成数据的恢复工作。Redis以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

实现AOF,配置redis.conf:(搜索aof)
1)appendonly:默认是no,改成yes开启AOF
2)appendfilename:指定AOF文件名,默认appendonly。aof
3)dir:和RDB公用
4)appendfsync:追加操作策略,no(30秒一次)always(每次修改都记录)eyerysec:(默认的)
5)auto-aof-rewrite-min-size:默认64mb,重写,删除无效命令

主从复制

一台服务器模拟三台主机,实现主从复制,复制三分配置文件,端口号1025-65535可以随便用
第一步:将redis.conf 拷贝三份,名字分别是,redis6380.conf(主),redis6382.conf(从),redis6384.conf(从)>redis6380.conf,在里面添加

include /usr/local/redis-5.0.9/redis.conf
daemonize yes
port 6380
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dbfilename dump6380.rdb

从配置文件:

include /usr/local/redis-5.0.9/redis.conf
daemonize yes
port 6382
pidfile /var/run/redis_6382.pid
logfile “6382.log”
dbfilename dump6382.rdb
slaveof 127.0.0.1 6380

include /usr/local/redis-5.0.9/redis.conf
daemonize yes
port 6384
pidfile /var/run/redis_6384.pid
logfile “6384.log”
dbfilename dump6384.rdb
slaveof 127.0.0.1 6380

进入src启动这三个服务器:
./redis-server …/redis6380.conf
./redis-server …/redis6382.conf
./redis-server …/redis6383.conf
启动客户端:
./redis-cli -p 6380
启动新窗口,启动客户端
./redis-cli -p 6382
查看主从关系
info replication

从只能读不能写

假设主服务器挂掉了,在进行人文处理,叫冷处理,手动设置一个从为主,剩下的slave挂到新的主上
命令:
1.slaveof no one
2.slaveof 127.0.0.1 6382

当6380修好之后,重启,应设置成从挂到6382上
在6380上执行命令:slaveof 127.0.0.1 6382

但上面的故障得人为发现,redis提供了哨兵模式

Redis提供了哨兵的命令,哨兵命令是一个独立的进程,哨兵通过发送命令,来监控主从服务器的运行状态,
如果检测到master故障了根据投票数自动将某一个slave转换master,然后通过消息订阅模式通知其它slave,
让它们切换主机。
然而,一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多哨兵进行监控。
哨兵3个以上,不能是偶数,默认端口号26379,在独立的服务器上运行的。有个投票机制,所以不能是偶数
哨兵的配置文件sentinel.conf
配置哨兵配置文件:
sentinel monitor mymaster 127.0.0.1 6379 2 mymaster自定义名称,127.0.0.1监控主redis的ip,6379端口号 2是投票数

新建三个哨兵配置文件
sentinel26380.conf
sentinel26382.conf
sentinel26384.conf
修改两个地方,端口号(哨兵运行的),和监控的主机ip端口号(6380)

启动哨兵进入src
./redis-sentinel …/sentinel26380.conf 前台启动
./redis-sentinel …/sentinel26382.conf
./redis-sentinel …/sentinel26384.conf

安全设置:
修改密码:修改配置文件requirepass
开启服务,开启客户端,需要输密码,1)./redis-cli -a 666 2)./redis-cli 回车 auto 666
修改绑定ip
修改默认端口

-p 端口号 -a密码

Jedis和线程池Commons-Pool

相关文章

微信公众号

最新文章

更多