Redis笔记

Redis

Redis配置

启动Redis

redis-server &

根据配置文件启动Redis

  1. redis-server redis.conf &
  2. 注意:如果修改了redis的配置文件redis.conf,必须在启动时指定配置文件,否则修改无效!

关闭Redis服务

  1. redis-cli shutdown
  2. redis-cli -h 192.168.163.131 -p 6379 shutdown
  3. redis-cli -h 192.168.163.131 -p 6379 -a 123456 shutdown

进入Redis客户端

  1. redis-cli
  2. redis-cli -h 127.0.0.1 -p 6379
  3. redis-cli -h 127.0.0.1 -p 6379 -a 123456

退出Reids客户端

exit或者quit

测试Redis性能

  1. redis-benchmark
  2. 在bin目录中测试

Redis常用命令

查看状态

  1. redis >ping 返回PONG
  2. 在redis客户端中执行
  3. 返回pong表示服务器运行正常

查看Redis服务器的统计信息

  1. info [section]
  2. section的值:server , clients ,memory等等。不加section 返回全部统计信息

切换Redis库命令

  1. select index
  2. index为0-999的序号

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

  1. dbsize

清空当前数据库

  1. flushdb

清空所有数据库(不常用)

  1. flushall

获得Redis的所有配置值

  1. config get parameter
  2. * 获得所有配置值
  3. databases 获取数据库个数
  4. port 获取端口号

查看当前数据库中有哪些key

  1. keys [通配符]
  2. * 表示0个或多个字符(单独一个*表示所有)
  3. ? 匹配随意一个字符
  4. [] 匹配中括号里面的一个字符

判断key在数据库中是否存在

  1. exists key
  2. 存在返回1,不存在返回0

可以判断多个key是否存在,若存在几个返回几

例如:exists a b c d --> 都存在返回4

移动一个数据库中的数据到其他数据库中(使用较少)

  1. move key index
  2. index为数据库的序号

剩余生存时间

  1. ttl key -->(time to live的简称) 查看剩余生存时间
  2. 返回值为-2表示当前库不存在
  3. 返回值为-1表示一直存在

设置生存时间

  1. expire key sceonds

查看key的数据类型

  1. type key

key的重命名

只修改key的名称不修改值

  1. rename key1 key2
  2. key1:原名称
  3. key2:修改后的名称

删除指定的key

  1. del key [key......]
  2. 返回值实际删除key的数量

String类型数据的操作命令

将String类型的数据设置到redis中

  1. set 键 值
  2. 如果key已经存在了,那么就会覆盖

获取String类型数据的值

  1. get key

追加字符串

  1. append key value
  2. 返回追加之后字符串的长度
  3. 如果key不存在,则新创建一个key,并且把value设置为value

获取字符串的长度

  1. strlen key

将字符串数值进行加一运算

  1. incr key
  2. 返回加1之后的数据
  3. 如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算
  4. 要求key所表示必须是数值,否则报错。

将字符串数值进行减一运算

  1. decr key
  2. 返回减1之后的数据
  3. 如果key不存在,首先设置一个key,值初始化为0,然后进行incr运算
  4. 要求key所表示必须是数值,否则报错。

将字符串数值进行加offset运算

  1. incrby key offset
  2. 返回加offset运算之后的数据
  3. 如果key不存在,首先设置一个key,值初始化为0,然后进行incrby运算
  4. 要求key所表示必须是数值,否则报错。

将字符串数值进行减offset运算

  1. decrby key offset
  2. 返回减offset运算之后的数据
  3. 如果key不存在,首先设置一个key,值初始化为0,然后进行decrby运算
  4. 要求key所表示必须是数值,否则报错。

获取字符串key中从startIndex到endIndex的字符组成的子字符串:

  1. getrange key startIndex endIndex
  2. 前后都是闭区间
  3. 下标从右到左:0 到 length-1
  4. 下标从右到做:-length 到 -1

修改字符串key中从startIndex字符组成子字符串

  1. setrange key startIndex value
  2. 能覆盖几个字符就覆盖几个字符

设置字符串的同时,设置它最大生命周期

  1. setex k1 20 v1

设置String类型的数据value到Redis数据库中,当key不存在时设置成功,否则,则放弃设置

  1. setnx key value

批量将String类型的数据设置到redis中

  1. mset 键1 值1 键2 值2....

批量从Redis中获取String类型的数据

  1. mget 键1 键2 键3....

批量设置String类型的数据value到redis数据库中,当所有key都不存在时设置成功,否则(只要有一个以及存在),则全部放弃

  1. msetnx 键1 值1 键2 值2

list类型的数据

将一个或多个值依次插入到列表的表头(左侧)

  1. lpush key value[value value.....]

获取指定列表中的下标区间的元素

  1. lrange key startIndex endIndex
  2. 前后都是闭区间

将一个或多个值依次插入到列表的表尾(右侧)

  1. rpush key value[value value.....]

从指定列表中移除并且反回表头元素

  1. lpop key

从指定列表中移除并且反回表尾元素

  1. rpop key

获取指定列表中指定下标的元素

  1. lindex key index

获取指定列表的长度

  1. llen key

根据count值移除指定列表中跟value相等的数据

  1. lrem key count value
  2. 返回结果为删除的值得个数
  3. count大于0从列表的左侧移除count个跟value相等的数据
  4. count小于0从列表的右侧移除count个跟value相等的数据
  5. count等于0从列表中移除所有跟value相等的数据

截取指定列表中指定下标区间的元素组成新的列表,并且赋值给key

  1. ltrim key startIndex endIndex

将指定列表中指定下标的元素设置为指定值

  1. lset key index value

将value插入到指定列表中位于pivot元素之前/之后的位置

  1. linsert key before/after pivot value
  2. 命令执行成功,返回新列表的长度
  3. 没有找到pivot返回 -1
  4. key不存在返回0

set集合

  1. 单key-多无序value
  2. 没有下标
  3. 一个key对应多个vlaue;
  4. value之间没有顺序,并且不能重复
  5. 通过业务数据直接操作集合。

将一个或者多个元素添加到指定的集合中

  1. sadd key value [value value ....]
  2. 如果元素已经存在,则会忽略,元素之间不能重复
  3. 返回成功加入的元素的个数

获取指定集合中所有的元素

  1. smembers key

判断指定元素在指定集合中是否存在

  1. sismember key member
  2. 存在,返回1
  3. 不存在,返回0

获取指定集合的长度

  1. scard key

移除指定集合中一个或者多个元素

  1. srem key member [member .....]
  2. 不存在的元素会被忽略
  3. 返回成功成功移除的个数

随机获取指定集合中的一个或者多个元素

  1. srandmember key [count]
  2. count:随机产生几个数据
  3. |->count>0:随机获取的多个元素之间不能重复
    |->count<0: 随机获取的多个元素之间可能重复

从指定集合中随机移除一个或者多个元素

  1. spop key [count]
  2. 返回随机移除元素的值

将指定集合中的指定元素移动到另一个元素

  1. smove source dest member
  2. source:移动之前的集合
  3. dest:移动之后的集合
  4. member:移动的值

-----------------------------------------------------------

集合中都有以下三个命令

获取第一个集合中有、但是其它集合中都没有的元素组成的新集合(差)

  1. sdiff key key [key key ....]

获取所有指定集合中都有的元素组成的新集合(交)

  1. sinter key key [key key ....]

获取所有指定集合中所有元素组成的大集合(并)

  1. sunion key key [key key .....]

hash类型数据

单key:field-value
field-value

将一个或者多个field-vlaue对设置到哈希表中

  1. hset key filed1 value1 [field2 value2 ....]
  2. key:数据标识
  3. field:域
  4. value:值
  5. 如果key field已经存在,把value会把以前的值覆盖掉

获取指定哈希表中指定field的值

  1. hget key field

批量将多个field-value对设置到哈希表中

  1. 不常用,常用hset 命令
  2. hmset key filed1 value1 [field2 value2 ....]

批量获取指定哈希表中的field的值

  1. hmget key field1 [field2 field3 ....]

获取指定哈希表中所有的field和value

  1. hgetall key

从指定哈希表中删除一个或者多个field

  1. hdel key field1 [field2 field3 ....]

获取指定哈希表中所有的filed个数

  1. hlen key

判断指定哈希表中是否存在某一个field

  1. hexists key field
  2. 存在返回1
  3. 不存在返回0

获取指定哈希表中所有的field列表

  1. hkeys key

获取指定哈希表中所有的value列表

  1. hvals key

对指定哈希表中指定field值进行整数加法运算

  1. hincrby key field int

对指定哈希表中指定field值进行浮点数加法运算

  1. hincrbyfloat key field float

将一个field-vlaue对设置到哈希表中,当key-field已经存在时,则放弃设置

  1. hsetnx key field value

zset集合

  1. 有序集合
  2. 本质上是集合,所有元素不能重复;
  3. 每一个元素都关联一个分数,redis会根据分数对元素进行自动排序(默认从小到大的排序)
  4. 分数可以重复,但是集合中的元素不能重复
  5. 既然有序集合中每一个元素都有顺序,那么也都有下标;
  6. 有序集合中元素的排序规则又列表中元素的排序规则不一样。

将一个或者多个member及其score值加入有序集合

  1. zadd key score member [score member ....]
  2. 如果元素已经存在,则把分数覆盖

获取指定有序集合中指定下标区间的元素

  1. zrange key startIndex endIndex [withscores]
  2. 升序排序,从小到大,闭区间
  3. withscores:会把分数一起显示出来

获取指定有序集合中指定下标区间的元素

  1. zrevrange key startIndex endIndex [withscores]
  2. 降序排序,从大到小,闭区间
  3. withscores:会把分数一起显示出来

获取指定有序集合中指定分数区间(闭区间)的元素

  1. zrangebyscore key min max [withscores]
  2. 升序,从小到大

删除指定有序集合中一个或者多个元素

  1. zrem key member [member......]

获取指定有序集合中所有元素的个数

  1. zcard key

获取指定有序集合中分数在指定区间内的元素的个数

  1. zcount key min max

获取指定有序集合中指定元素的排名

  1. zrank key member
  2. 排名从0开始
  3. 升序排名,从小到大

获取指定有序集合中指定元素的分数

  1. zscore key member

获取指定有序集合中指定元素的排名

  1. zrevrank key member
  2. 降序排名,按照分数从大到小的排名

redis配置文件

  1. 在redis根目录下提供redis.conf配置文件
  2. 使用配置文件时,要进入到redis目录中,因为是相对路径。

网络的配置

  1. port:指定redis服务所使用的端口,默认使用6379。
  2. bind: 配置客户端连接redis服务时,所能使用的ip地址,默认可以使用redis服务所在主机上任何一个ip都可以;一般情况下,都会配置一个ip,而且通常是一个真实。
  3. 如果配置了port和bind,则客户端连接redis服务时,必须指定端口和ip:
    redis-cli -h 192.168.11.128 -p 6380 进入客户端
    redis-cli -h 192.168.11.128 -p 6380 shutdown 退出客户端
    tcp-keepalive:连接保活策略。

常规配置:

  1. loglevel:配置日志级别,开发阶段配置debug,上线阶段配置notice或者warning.
  2. logfile:指定日志文件。redis在运行过程中,会输出一些日志信息;默认情况下,这些日志信息会输出到控制台;我们可以使用logfile配置日志文件,使redis把日志信息输出到指定文件中。
  3. databases:配置redis服务默认创建的数据库实例个数,默认值是16。

安全配置:

  1. requirepass:设置访问redis服务时所使用的密码;默认不使用。
  2. 此参数必须在protected-mode=yes时才起作用。
  3. 一旦设置了密码验证,客户端连接redis服务时,必须使用密码连接:
    redis-cli -h ip -p port -a pwd

redis的持久化

redis提供持久化策略,在适当的时机采用适当手段把内存中的数据持久化到磁盘中,每次redis服务启动时,都可以把磁盘上的数据再次加载内存中使用。

RDB策略

  1. RDB策略:在指定时间间隔内,redis服务执行指定次数的写操作,会自动触发一次持久化操作。
  2. RDB策略是redis默认的持久化策略,redis服务开启时这种持久化策略就已经默认开启了。
  3. save <seconds> <changes>:配置持久化策略
  4. dbfilename:配置redis RDB持久化数据存储的文件
  5. dir: 配置redis RDB持久化文件所在目录

AOF策略

  1. AOF策略:采用操作日志来记录进行每一次写操作,每次redis服务启动时,都会重新执行一遍操作日志中的指令。
  2. 效率低下,redis默认不开启AOF功能。

指令

  1. appendonly:配置是否开启AOF策略
  2. appendfilename:配置操作日志文件

redis事务

  1. 把一组数据库命令放在一起执行,保证操作原子性,要么同时成功,要么同时失败。
  2. redis的事务:允许把一组redis命令放在一起,把所有命令进行序列化,然后一起执行,保证部分原子性
  3. 在事务执行中,不会被其他客户端发来的命令打断(除非使用watch命令监控某些键)
  4. redis不保证事务的原子性,同一个事务中如果一条命令执行失败,其他命令仍可能会被执行,redis事务没有回滚,
  5. redis已经在系统内部进行功能简化,这样可以保证更快的运行速度,因为redis不需要事务回滚能力

命令

  1. multi:用来标记一个事务的开始。
  2. exec:用来执行事务队列中所有的命令。
  3. discard:清除所有已经压入队列中的命令,并且结束整个事务。
  4. watch:监控某一个键,当事务在执行过程中,此键代码的值发生变化,则本事务放弃执行;否则,正常执行。
  5. unwatch:放弃监控所有的键。

redis的事务只能保证部分原子性:

  1. 如果一组命令中,有在压入事务队列过程中发生错误的命令,则本事务中所有的命令都不执行,能够保证事务的原子性。
  2. 如果一组命令中,在压入队列过程中正常,但是在执行事务队列命令时发生了错误,则只会影响发生错误的命令,不会影响其它命令的执行,不能够保证事务的原子性。

redis如何监控银行财务

  1. 先定义一个version的乐观锁
  2. 每次修改表中数据时候,先查出version的乐观锁的值
  3. 修改数据后,将乐观锁进行+1运算
  4. 如果version字段在事务执行过程中数值进行了变化,则放弃事务的修改
  5. 通常在事务开启时,用watch监听version
  6. 如果version 发生了变化,此次事务就会失败

redis集群

  1. redis的主从复制:主少从多、主写从读、读写分离、主写同步复制到从。
  2. 一台主机配置多台从机,一台从机又可以配置多台从机,从而形成一个庞大的集群架构。
    减轻一台主机的压力,但是增加了服务间的延迟时间。

指令

  1. slaveof 127.0.0.1 6379 设置为从库
  2. slaveof no one 取消从库,设置为主库

搭建一主二从redis集群

搭建三台redis服务:使用一个redis模拟三台redis服务
  1. 提供三分redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf
  2. 修改三份配置文件:以redis6379.conf为例
    bind 127.0.0.1 ip地址
    port 6379 端口号
    pidfile /var/run/redis_6379.pid
    logfile “6379.log” 日志文件
    dbfilename dump6379.rdb 持久化文件
  3. 分别使用三个redis配置文件,启动三个redis服务:
    redis-server redis6379.conf &
    redis-server redis6380.conf &
    redis-server redis6381.conf &
通过redis客户端分别连接三台redis服务:

​ redis-cli -h 127.0.0.1 -p 6379
​ redis-cli -h 127.0.0.1 -p 6380
​ redis-cli -h 127.0.0.1 -p 6381

查看三台redis服务在集群中的主从角色:
  1. info replication 查看redis服务主从信息
  2. 默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机。
先在6379进行写操作:
  1. set k1 v1
  2. 三台rdis服务互相独立,互不影响。
设置主从关系:设从不设主
  1. 在6380上执行:slaveof 127.0.0.1 6379
  2. 在6381上执行:slaveof 127.0.0.1 6379
全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库。
  1. 在6380和6381上执行:keys *
增量复制:主库写数据会自动同步到从库。
  1. 在6379上执行:set k2 v2
  2. 在6380和6381上执行:keys *
主写从读,读写分离:
  1. 在6380和6381上执行:set k3 v3 ===>报错
  2. 从机上只能读取数据,不能修改数据
主机宕机、从机原地待命:
  1. 关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
  2. 查看6380和6381服务的主从角色:info replication
主机恢复、一切恢复正常:
  1. 重启6379服务:redis-server redis6379.conf &
  2. 客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
从机宕机、主机少一个从机、其它从机不变:
  1. 关闭6380服务: redis-cli -h 127.0.0.1 -p 6380 shutdown
  2. 查看6379服务的主从角色:info replication
  3. 查看6381服务的主从角色:info replication
从机恢复、需要重新设置主从关系:
  1. 重启6380服务:redis-server redis6380.conf &
  2. 客户端连接6380:redis-cli -h 127.0.0.1 -p 6380
  3. 在6380上执行: slaveof 127.0.0.1 6379
从机上位:
  1. 主机宕机、从机原地待命:
    关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
    查看6380和6381服务的主从角色:info replication
  2. 从机断开原来主从关系:
    在6380上执行:slaveof no one
    查看6380服务的主从角色:info replication
  3. 重新设置主从关系:
    在6381上执行:slaveof 127.0.0.1 6380
  4. 之前主机恢复、变成孤家寡人:
    重启6379服务:redis-server redis6379.conf &
    客户端连接6379:redis-cli -h 127.0.0.1 -p 6379
  5. 天堂变地狱:
    在6379上执行:slaveof 127.0.0.1 6381
    在6381上执行:info replication 既是主机又是从机

哨兵模式

  1. 主机宕机、从机上位的自动版。

搭建哨兵模式

搭建一主二从集群架构:(集群搭建前五步)
提供哨兵配置文件:
  1. 在redis安装目下创建配置文件:redis_sentinel.conf
  2. 使用vim指令进行写入以下指令
  3. sentinel monitor dc-redis 127.0.0.1 6379 1
启动哨兵服务:

redis-sentinel redis_sentinel.conf

主机宕机:
  1. 关闭6379服务:redis-cli -h 127.0.0.1 -p 6379 shutdown
  2. 哨兵程序自动选择从机上位。
之前主机恢复:自动从属于新的主机。
  1. 重启6379服务:redis-server redis6379.conf &
  2. 客户端连接6379:redis-cli -h 127.0.0.1 -p 6379

java程序中访问redis

创建maven版的java工程

添加jedis依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

创建Jedis连接

  1. 关闭linux的防火墙
  2. redis-cli -h ip -p port
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值