Redis个人笔记

一、Redis
1、定义:
2、redis和memcached相比的独特之处

>
>
3、安装:下载\解压(容易发生时间错误)
make
make PREFIX=/usr/local/redis install
拷贝配置文件 cp /usr/local/src/redis-2.6.16/redis.conf /usr/local/redis

4、启动:/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
   连接:/usr/local/redis/bin/redis-cli

5、进程方式运行编辑配置文件:daemonize yes

二、命令及数据结构的操作
1、通用操作

set key value
get key
keys * 查询所有的key
keys key 通配指定字符
keys key* 通配
keys key[ab] 通配指定字符
keys key[?].. 通配单个字符
randomkey 返回随机的key
type key 返回类型
exists key 判断是否存在返回1/0
del key 删除key
rename key value 修改key的名称,如有原名存在覆盖.
renamenx key newkey 修改key的名称,新名称存在了不允许修改.
move key 1[服务器号码]
配置文件databases:16; select 0-15改变库,默认是0号服务器.
ttl key 查询有效期 不过期-1,2.8后不存在-2 秒
pttl key 查询有效期 不过期-1,2.8后不存在-2 毫秒
expire key 整型值s
pttl key 查询有效期
pexpire key 整型值ms
persist key 变为永久有效
flushdb 清空库

 2、redis字符串类型的操作
     >>set key value [ex 秒] | [px 毫秒]  [nx 不存在新增]  [xx 存在修改]
     >>mset key value key value ... 设置多个键值
     >>get key
     >>mget key key ...             获得多个键值
     >>append key [追加的值]        字符串后面追价值
     >>getset key newvalue          获得旧值,并设置新值
     >>setrange key [偏移量] [新值] 从偏移量开始替换成新值
     >>getrange key [start stop]    获得部分值(左边0,右边-1)
     >>incr key                     增加1   incrby key 5   incrbyfloat key +/-0.5
     >>decr key                     减少1   decrby key 5
     >>setbit key 2 1/0             变成大/小写
       A 65 0100 0001
       a 97 0110 0001
     >>bitop operation destkey key1[key2...]

 3、link链表结构(单项、双向、循环)
     >>lpush key value   左边插入值
     >>rpush key value   右边插入值
     >>lrange key start end
     >>lpop key          左边弹出值
     >>rpop key          左边弹出值
     >>lrem key count value  删除单元值 count+从前完后-从后往前
     >>ltrim key star end    截取一小段
     >>lindex key 0/1/2...  返回单个单元
     >>llen key 返回长度
     >>linsert key after/before [value] newvalue  在某个值的前面后面插入
     >>rpoplpush A B     A链表右边弹出,B链表左边推进
     >>brpop,blpop key timeout

 4、set 集合
    >>特点:无序性、唯一性、确定性
    >>sadd key value1 value2  增加元素
    >>smembers key            查看所有元素
    >>srem key value          删除元素
    >>spop key                删除集合中的1个随机元素
    >>srandmember key         随机得到集合中的1个元素
    >>sismember key  value         判断是否存在
    >>scard key               集合元素的个数
    >>smove source dest key   把key从source移动到dest
    >>sinter key1 key2 key3   交集
    >>sunion key1 kye2 key3   并集
    >>sdiff  key1 kye2 key3   差集 

 5、order set有序集合(score)
    >>zadd key score1 value1 score2 value2
    >>zrange key star stop  按内部排序起始值
    >>zrange key 1 3 withscores 取出vaule和score
    >>zrangebyscore key star stop 按score的值取
    >>zrangebyscore key star stop limit 1 2 (跳过1个取2个)
    >>zrank key value           给一个元素算出排名-升序
    >>zrevrank class value      给一个元素算出排名-降序
    >>zremrangebyscore key score1 score2  按score来删除
    >>zremrangebyrank key 排名开始 排名结束 按排名删除
    >>zrem key value            删除指定值                        
    >>zcard key                 统计元素个数
    >>zcount key 25 30          按分数统计元素个数
    交集
    >>zinterstore 结果 (2) 集合1 集合2 aggreagte sum  合并并求和 
    >>zinterstore 结果 (2) 集合1 集合2 aggreagte min  合并并求和
    >>zinterstore 结果 (2) 集合1 集合2 aggreagte max  合并并求和
    >>zinterstore 结果 (2) 集合1 集合2 weights 2 1 aggreagte sum  合并并求和
    并集

 6、hash数据类型(类似关联数组 field => value )
    >>hset key filed vaule               添加值
    >>hget key filed                     获取值
    >>hmset key filed vaul filed vaul    添加多个值
    >>hmget key filed filed filed filed  添加多个值
    >>hgetall key                       获得所有值
    >>hdel key filed                     删除值
    >>hlen key                           获取单元个数
    >>hexists key filed                  判断是否存在
    >>hincrby key filed 1/2...
    >>hincrbyfloat key filed 1/2...
    >>hkeys key                          返回多有的键
    >>hvals key                        返回所有的值

三、redis(单进程)事物

redis事物与mysql对比
事项 mysql redis
开启 start transaction; multi
语句 普通sql; 普通命令
失败 rollback;回滚 discard取消队列
成功 commit; exec
语法错误exec报错所有的语句不执行.
语法正确类型错误,正确的语句被执行了(程序员负责).

    >>监视
    >>悲观想法
      世界充满危险,肯定有人和我抢, 给 ticket上锁, 只有我能操作. [悲观锁].

    >>乐观想法
       没有那么人和我抢,因此,我只需要注意,有没有人更改ticket的值就可以了 [乐观锁]

    >>开始监视watch key1 key2,只要监视的值发生变化,取消执行.
      取消监视unwatch

四、消息订阅
发布:publish [频道名] [内容]; 返回订阅客户端的个数
订阅:subscribe [频道名]
psubscribe new*

五、持久化(关机后还有)
工作方式

rdb(快照持久化)
1、每隔N分钟或者N次写操作后,从内存dump数据形成rdb文件,压缩放在备份目录.
redis-server 子进程 rdbdump
响应客户端 达到触发条件导出数据
监视触发条件

2、重写条件(这三个选项屏蔽禁用导出)
save 900 1     900秒发生1个key变化
save 300 10    300秒发生10个key变化
save 60 10000  60秒发生1万次变化  

3、如果rdb导出出错,停止写入内存
stop-writes-on-bgsave-error yes

4、导出rdb压缩
rdbcompression yes

5、导入rdb数据到内存完整性
rdbchecksum yes

6、导出文件名
dbfilename dump.rdb

7、导出文件路径
dir ./

测试性能
/usr/local/redis/bin/redis-benchmark -n 2000

缺点
可能造成一段时间内的数据丢失.

>>aof(日志持久化)

工作方式:aof把每次执行的命令写入文本文件,每次写速度下来了,怎么写.

1、打开
appendonly yes/no  开启关闭aof功能

2、多久写一次
appendfsync always   每个命令都同步到aof,安全速度慢
appendfsync everysec 每秒1写次
appendfsync no       由操作系统判断

3、正在快照停止aof,避免io太高.
no-appendfsync-on-rewrite no/yes

4、aof重写条件
auto-aof-rewrite-percentage 100   与上次比增加100%后重写
auto-aof-rewrite-min-size 32mb    至少32M重写

5、aof文件名
appendfilename appendonly.aof

问题:
rdb、aof两种模式存在rdb快.
rdb、aof都有了,以aof(空文件)来恢复.

六、主从配置集群
1、读写分离,分担master任务.
2、主从备份防止宕机.
3、任务分离,主从分别分担备份与计算工作.

>>结构:一主多从            (星   型)
            一主一从再跟从   (直线型)

>>主从通信过程:
    Master<——————>Slave
    1、Maste开始dump导出rdb,Slave恢复.
    2、aof中中间的缓存同步
    3、以后进程保存联系

>>三台机器集群
    公共配置
    daemonize yes                               后台进程运行
    pidfile /usr/local/redis/redisXXXX.pid  
    port XXXX                                      端口号

     主服务器6379
      #save 900 1         关闭rdb
      #save 300 10
      #save 60 10000
      appendonly yes
      appendfsync everysec
      appendfilename /var/run/appendonly6379.aof
      no-appendfsync-on-rewrite yes
       #在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免与命令的追加造成DISK IO上的冲突。

     从服务器6380         
      dbfilename dump6380.rdb
      dir /usr/local/redis/
      slaveof localhost 6379
      stop-writes-on-bgsave-error yes
      slave-read-only yes 只读状态

     从服务器6381
      #save 900 1         关闭rdb
      #save 300 10
      #save 60 10000
      #appendonly no   关闭aof
      slave-read-only yes 只读状态

      启动密码
      主服务器:requirepass foobared    auth shunjian
      从服务器:masterauth <master-password>

      启动服务
        /usr/local/redis/bin/redis-server /usr/local/redis/redis6379.conf
        /usr/local/redis/bin/redis-server /usr/local/redis/redis6380.conf
        /usr/local/redis/bin/redis-server /usr/local/redis/redis6381.conf

      缺点:多台slave不要一下起来,否则IO剧增.

七、redis运维知识
time 显示服务器时间 , 时间戳(秒), 微秒数
dbsize 当前数据库的key的数量
bgrewriteaof 后台进程重写aof
save 保存rdb快照,会停止当前工作.
bgsave 后台保存rdb快照
lastsave 上次保存时间
Flushdb 清空当前库所有键
Flushall 清空所有库所有键
info
内存使用
used_memory:859192 数据结构的空间
used_memory_rss:7634944 实占空间
mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.

        从服务器情况
            role:master
            connected_slaves:0

        持久化
            rdb_changes_since_last_save:6
            rdb_last_save_time:1382366180

        Fork 性能
            latest_fork_usec:864 了解最近一次 fork 操作导致了多少时间的卡顿

        获取配置配置文件
            config get [requirepass]
            config set [requirepass]

        慢查询日志
            slowlog-log-slower-than 10000   慢日志时间
            slowlog-max-len 128             慢日志条数

        关闭服务器
           Shutdown [save/nosave]

八、数据flushdb、dump转移到另一个服务器
数据被清空
flushdb
shotdown
编辑aof文件删除flushdb
重启恢复

        dump数据转移
            cp 一份dump文件
            关闭aof,打开rdb
            启动服务器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值