Redis个人笔记

来源:互联网 发布:java ftp 编辑:程序博客网 时间:2024/05/17 01:47

一、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-cli5、进程方式运行编辑配置文件: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 yes4、导出rdb压缩rdbcompression yes5、导入rdb数据到内存完整性rdbchecksum yes6、导出文件名dbfilename dump.rdb7、导出文件路径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/yes4、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            启动服务器
0 0