redis

1 windows下载地址

下载地址:https://github.com/MSOpenTech/redis/tags

2 常用命令

1 string help @String

  • 添加/修改数据

    set key value

  • 获取数据

get key

  • 删除数据

    del key

  • 添加/修改多个数据

    mset key1 value1 key2 value2

mget key1 key2 获取多个数据

strlen key 获取数据字符个数(字符串长度)

append key value 追加信息到原始信息后部(如果原始信息存在就追加,否则新建)

数值操作

incr key 加一

incrby key increment 加n

incrbyfloat key increment

decr key

decrby key increment

设置数据具有指定的生命周期

setex key seconds value

psetex key milliseconds value

2, hash

hset key field value 添加/修改数据

获取数据

hget key field

hgetall key

hdel key field1 [field2] 删除数据

hmset key field1 value1 field2 value2 添加/修改多个数据

hsetnx key field value 如果对应field右值则什么也不做,否则设置值

hmget key field1 field2 … 获取多个数据

hlen key 获取哈希表中字段的数量

hexists key field 获取哈希表中是否存在指定的字段

获取哈希表中所有的字段名或字段值

hkeys key

hvals key

设置指定字段的数值数据增加指定范围的值

hincrby key field increment

hincrbyfloat key field increment

3, list(像是一个双端的栈)

  • 添加/修改数据

    lpush key value1 [value2] ……

    rpush key value1 [value2] ……

  • 获取数据

    lrange key start stop

    lindex key index

    llen key

  • 获取并移除数据

    lpop key

    rpop key

  • 规定时间内获取并移除数据

    blpop key1 [key2] timeout

    brpop key1 [key2] timeout

    brpoplpush source destination timeout

  • 移除指定数据

    lrem key count value count代表移除多少个(list中可能会有重复的值)

4, set

  • 添加数据

    sadd key member1 [member2]

  • 获取全部数据

    smembers key

  • 删除数据

    srem key member1 [member2]

  • 获取集合数据总量

    scard key

  • 判断集合中是否包含指定数据

    sismember key member

  • 随机获取集合中指定数量的数据

    srandmember key [count]

  • 随机获取集合中的某个数据并将该数据移出集合

    spop key [count]

  • 求两个集合的交、并、差集

    sinter key1 [key2]

    sunion key1 [key2]

    sdiff key1 [key2]

  • 求两个集合的交、并、差集并存储到指定集合中

    sinterstore destination key1 [key2]

    sunionstore destination key1 [key2]

    sdiffstore destination key1 [key2]

  • 将指定数据从原始集合中移动到目标集合中

    smove source destination member

5, sorted_set (根据score排名)

  • 添加数据

    zadd key score1 member1 [score2 member2]

  • 获取全部数据(指定名次)

    zrange key start stop [WITHSCORES]

    zrevrange key start stop [WITHSCORES]

  • 删除数据

    zrem key member [member …]

  • 按条件获取数据

    zrangebyscore key min max [WITHSCORES] [LIMIT]

    zrevrangebyscore key max min [WITHSCORES]

  • 条件删除数据

    zremrangebyrank key start stop

    zremrangebyscore key min max

  • 获取集合数据总量

    zcard key

    zcount key min max

  • 集合交、并操作

    zinterstore destination numkeys key [key …]

    zunionstore destination numkeys key [key …]

  • 获取数据对应的索引(排名)

    zrank key member

    zrevrank key member

  • score值获取与修改

    zscore key member

    zincrby key increment member

6,bitmaps

  • 设置指定key对应偏移量(位)上的bit值,value只能是1或0

    setbit key offset value

  • 获取指定key对应偏移量上的bit值

    getbit key offset

  • 对指定key按位进行交、并、非、异或操作,并将结果保存到destKey中

    bitop op destKey key1 [key2…] op: and:交 or:并 not:非 xor:异或

  • 统计指定key中1的数量

    bitcount key [start end]

7,HyperLogLog

基数

  • 基数是数据集去重后元素个数
  • HyperLogLog 是用来做基数统计的,运用了LogLog的算法

{1, 3, 5, 7, 5, 7, 8} 基数集: {1, 3, 5 ,7, 8} 基数:5

  • 添加数据

pfadd key element [element …]

  • 统计数据

    pfcount key [key …]

  • 合并数据

    pfmerge destkey sourcekey [sourcekey…]

耗空间极小,每个hyperloglog key占用了12K的内存用于标记基数.误差范围:基数估计的结果是一个带有 0.81% 标准错误的近似值

3,通用操作

key操作

  • 删除指定key

    del key

  • 获取key是否存在

    exists key

  • 获取key的类型

    type key

  • 为指定key设置有效期

    expire key seconds

    pexpire key milliseconds

    expireat key timestamp

    pexpireat key milliseconds-timestamp

  • 获取key的有效时间

    ttl key (key不存在返回-2,如果存在设置了有效期返回剩余有效期,没有设置有效期返回-1)

    pttl key

  • 切换key从时效性转换为永久性

    persist key

  • 查询key

    keys pattern

    keys * 查询所有

    keys it* 查询所有以it开头

    keys *heima 查询所有以heima结尾

    keys ??heima 查询所有前面两个字符任意,后面以heima结尾

    keys user:? 查询所有以user:开头,最后一个字符任意

    keys u[st]er:1 查询所有以u开头,以er:1结尾,中间包含一个字母,s或t

  • 为key改名

    rename key newkey

    renamenx key newkey 如果newkey不存在,成功

  • 对所有key排序

    sort key [desc] (help sort) 只能对集合排序

数据库操作

  • redis为每个服务提供有16个数据库,编号从0到15

  • 切换数据库

    select index

  • 数据移动

    move key db (必须保障本数据库有对应key,和对应数据库没有对应key)

  • 数据清除

    dbsize 库里面有多少key

    flushdb 干掉对应数据库中所有key

    flushall 干掉所有数据库中所有key

4, jedis

1, 引入jar

<dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
 <version>2.9.0</version>
</dependency>

2, 使用步骤

//连接redis

Jedis jedis = new Jedis("localhost", 6379);

//操作redis

jedis.set("name", "itheima");
jedis.get("name");
//关闭redis连接
jedis.close();

http://xetorthio.github.io/jedis/

java-1.8.0-openjdk-devel-1.8.0

5, linux下安装redis

wget http://download.redis.io/releases/redis-4.0.0.tar.gz

tar –xvf 文件名.tar.gz

redis-server -p 6380 换端口启动redis

redis-cli -p 6380

1, 修改配置文件

cat redis.conf | grep -v “#” | grep -v “^$” > redis-6379.conf

修改内容如下:

port 6379
daemonize yes
logfile “6379.log”
dir /redis-4.0.0/data
protected-mode no

查看redis进程,并杀死

ps -ef|grep redis

kill -9 pid

6,持久化

1,RDB启动方式(快照)

  • 1,save(弃用)
  • save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞,线上环境不建议使用
  • 2,bgsave
  • 手动启动后台保存操作,但不是立即执行
  • 3,自动执行

1,RDB相关配置

  • 设置本地数据库文件名,默认值为 dump.rdb。通常设置为dump-端口号.rdb。

    dbfilename dump.rdb

  • 设置存储.rdb文件的路径。通常设置成存储空间较大的目录中,目录名称data。

    dir

  • 设置存储至本地数据库时是否压缩数据,默认为 yes,采用 LZF 压缩。通常默认为开启状态,如果设置为no,可以节省 CPU 运行时间,但会使存储的文件变大(巨大)

    rdbcompression yes

  • 设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行。通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存储一定的数据损坏风险

    rdbchecksum yes

  • 后台存储过程中如果出现错误现象,是否停止保存操作。通常默认为开启状态

    stop-writes-on-bgsave-error yes

  • 满足限定时间范围内key的变化数量达到指定数量即进行持久化。second:监控时间范围在 conf文件中进行配置

    save 12 2 (15分钟内,有1个key值变化,执行一次bgsave)

2, AOF(append only file)持久化

以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令 达到恢复数据的目的。与RDB相比可以简单描述为改记录数据为记录数据产生的过程。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式

1,AOF写数据三种策略(appendfsync)

  • always(每次)

    每次写入操作均同步到AOF文件中,数据零误差,性能较低,不建议使用。

  • everysec(每秒)

    每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高,建议使用,也是默认配置 在系统突然宕机的情况下丢失1秒内的数据

  • no(系统控制)

    由操作系统控制每次同步到AOF文件的周期,整体过程不可控

2, AOF 配置

  • 是否开启AOF持久化功能,默认为不开启状态

    appendonly yes|no

  • AOF写数据策略

    appendfsync always|everysec|no

  • AOF持久化文件名,默认文件名未appendonly.aof,建议配置为appendonly-端口号.aof

    appendfilename filename

  • AOF持久化文件保存路径,与RDB持久化文件保持一致即可

    dir

  • 自动重写

    auto-aof-rewrite-min-size size

    auto-aof-rewrite-percentage percentage

3,重写(简单说就是将对同一个数据的若干个条命令执行结 果转化成最终结果数据对应的指令进行记录。)

bgrewriteaof 手动重写

自动重写见AOF配置

7,事务

  • 开启事务

    multi 设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中

  • 执行事务。设定事务的结束位置,同时执行事务。与multi成对出现,成对使用

    exec

  • 取消事务。终止当前事务的定义,发生在multi之后,exec之前

    discard

8, 锁

  • 对 key 添加监视锁,在执行exec前如果key发生了变化,终止事务执行。必须在事务之前定义

    watch key1 [key2……]

  • 取消对所有 key 的监视

    unwatch

  • 使用 setnx 设置一个公共锁。对于返回设置失败的,不具有控制权,排队或等待。 对于返回设置成功的,拥有控制权,进行下一步的具体业务操作。value可以为任意值1

    setnx lock-key value

    del lock-key

  • 使用 expire 为锁key添加时间限定,到时不释放,放弃锁。由于操作通常都是微秒或毫秒级,因此该锁定时间不宜设置过大。

    expire lock-key second

    pexpire lock-key milliseconds

9, 删除数据

  • Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态
    • XX :具有时效性的数据
    • -1 :永久有效的数据
    • -2 :已经过期的数据 或 被删除的数据 或 未定义的数据 Redis中的数据特征

1,逐出算法

影响数据逐出的相关配置

  • 最大可使用内存 。占用物理内存的比例,默认值为0,表示不限制。生产环境中根据需求设定,通常设置在50%以上。

    maxmemory

  • 每次选取待删除数据的个数

    maxmemory-sample

  • 删除策略。达到最大内存后的,对被挑选出来的数据进行删除的策略

    maxmemory-policy no-enviction (禁止驱逐数据(redis4.0中默认策略),会引发错误OOM(Out Of Memory))

    • 检测易失数据(可能会过期的数据集server.db[i].expires )
      • volatile-lru:挑选最近最久未使用的淘汰
      • volatile-lfu:挑选最近使用次数最少的数据淘汰
      • volatile-ttl:挑选将要过期的数据淘汰
      • volatile-random:任意选择数据淘汰
    • 检测全库数据(所有数据集server.db[i].dict )
      • allkeys-lru:挑选最近最少使用的数据淘汰
      • allkeys-lfu:挑选最近使用次数最少的数据淘汰
      • allkeys-random:任意选择数据淘汰

10,服务器配置

  • daemonize yes|no 设置服务器以守护进程的方式运行
  • bind 127.0.0.1 绑定主机地址
  • port 6379 设置服务器端口号
  • databases 16 设置数据库数量
  • loglevel debug|verbose|notice|warning 设置服务器以指定日志记录级别
  • logfile 端口号.log 日志记录文件名
  • maxclients 0 设置同一时间最大客户端连接数,默认无限制。当客户端连接到达上限,Redis会关闭新的连接
  • timeout 300 客户端闲置等待最大时长,达到最大值后关闭连接。如需关闭该功能,设置为 0
  • include /path/server-端口号.conf 导入并加载指定配置文件信息,用于快速创建redis公共配置较多的redis实例配置文件,便于维护

1 , 主从, 集群

redis-server /redis-4.0.0/redis-6380.config --slaveof 127.0.0.1 6379

配置文件 slaveof 127.0.0.1 6379

断开连接 slaveof no one

  • 为避免slave进行全量复制、部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务

    slave-serve-stale-data yes|no

  • 复制缓冲区大小设定不合理,会导致数据溢出。如进行全量复制周期太长,进行部分复制时发现数据已 经存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环状态。

    repl-backlog-size 1mb (在主服务器上配置)

2, 哨兵

3,集群

cluster-enabled yes|no

cluster-config-file cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容

cluster-node-timeout 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点

sed “s/6379/6380/g” redis-6379.conf > redis-6380.conf

redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值