Last active
November 22, 2018 14:06
-
-
Save jingmian/7ee1ef7b6de69c613a76dc172874d1bc to your computer and use it in GitHub Desktop.
.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ---------keys操作--------------------- | |
| //查询指定key是否存在 | |
| exists key | |
| //随机返回一个键名 | |
| randomkey | |
| //删除Key | |
| del key1 key2 keyN | |
| //返回key的value类型 | |
| type key | |
| //返回匹配指定模式的所有Key,里面有key=name ,key=n_name,key=n_call, | |
| keys pattern | |
| 例子:keys n* //可以找出所有以n开头的key | |
| //改名字 | |
| rename oldkey newkey | |
| //返回当前数据库的key数量 | |
| dbsize | |
| //为key指定过期时间,秒单位 | |
| expire key seconds | |
| //为key指定过期时间,毫秒单位 | |
| pexpire key milliseconds | |
| //返回key的剩余过期秒数,以秒s为单位 | |
| ttl key | |
| //返回key的剩余过期毫秒数,以毫秒为单位 | |
| pttl key | |
| //在有效期内设置,取消过期时间 | |
| persist key | |
| //选择数据库,是按索引,0,1,2,3这样排序的,最大选择15序号,因为redis.conf最大允许只有16个数据库 | |
| select 2 | |
| //将key 从当前数据库移动到指定数据库 | |
| move key db-index | |
| //删除当前数据库中所有key | |
| flushdb | |
| //删除所有数据库中的所有key | |
| flushall | |
| ---------------字符串操作--------------------------------- | |
| //设置key对应的值为string类型的value | |
| set name zhangsan | |
| //一次设置多个key的值 | |
| mset key1 value1 keyN valueN | |
| //一次设置多个key的值,不存在则创建,否则失败 | |
| msetnx key1 value1 keyN valueN | |
| //一次获取多个Key的值 | |
| mget key1 key2 keyN | |
| //修改给定的key值,指定从offset偏移量开始,从0开始 | |
| SETRANGE key offest value | |
| //设置key指定的值,同时设置时间,秒单位 | |
| setex key value 30 | |
| //对key的值做加加操作,并返回新的值 | |
| incr key | |
| incr monkey //第一次返回1 | |
| //对Key的值做减减操作,并返回新的值 | |
| decr key | |
| //同incr,加指定值 | |
| incrby key integer | |
| //同incr,加指定值,浮点数 | |
| incrbyfloat key integer | |
| //同decr,减指定值 | |
| decrby key integer | |
| //给指定key的字符串值追加value | |
| append key value | |
| //返回截取过的key的字符串值 | |
| substr key start end | |
| substr color 6 10 -----------截取后包括起始位置和结束位置 | |
| //如果键值不存在,则创建 | |
| setnx name zhangsan | |
| ----------------------------list类型操作,类似php索引数组------------------------------------ | |
| //在key对应List的头部添加字符串元素,l是英文Left简写 | |
| lpush key string | |
| //从List的尾端删除元素,并返回删除元素 | |
| rpop key | |
| 例子:最新登录前10名用户,用户每登录一次,lpush一下,然后在rpop,像银行排队顺序 | |
| //对应list的长度,key不存在返回0,如果key对应类型不是list 返回错误 | |
| llen key | |
| //返回指定区间内的元素,小标从0开始,end为-1,表示查看所有,key类似数组名称 | |
| lrange key start end | |
| //在key对应List的尾部添加字符串元素,r是英文right简写 | |
| rpush key string | |
| //当key存在的时候,向左边添加数据,每次只能增加一个值 | |
| lpushx key string | |
| //当key存在的时候,向右边添加数据,每次只能增加一个值 | |
| rpushx key string | |
| //在list的头部(最左边)删除元素,并返回删除元素 | |
| lpop key | |
| //如果指定的列表 key list1 存在数据则从左边删除,返回第一个元素,否则在等待100秒后会返回 nil 。 | |
| blpop key time | |
| //如果指定的列表 key list1 存在数据则从右边删除,返回第一个元素,否则在等待100秒后会返回 nil 。 | |
| brpop key time | |
| //修改list某个索引下的值 | |
| lset KEY_NAME INDEX VALUE | |
| //截取list,保留指定区间内元素 | |
| ltrim key start end | |
| //返回列表Key中,下标为Index的元素 | |
| lindex key index | |
| //让列表只保留指定闭区间内的元素 | |
| ltrim key start stop | |
| //将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。 | |
| linsert key BEFORE|AFTER pivot value | |
| //lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元 | |
| count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 | |
| count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 | |
| count = 0 : 移除表中所有与 VALUE 相等的值。 | |
| lrem key COUNT VALUE | |
| ----------------------------hset类型操作,类似php关联数组------------------------------------ | |
| //如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。 | |
| hset jd tv sanxing | |
| //命令用于返回哈希表中指定字段的值 | |
| hget KEY_NAME FIELD_NAME | |
| //hmset同时设置多个值,会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表。 | |
| hmset KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN | |
| //在哈希表中,同时获取一个或多个给定字段的值 | |
| hmget KEY_NAME FIELD1...FIELDN | |
| //hsetnx哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,操作无效。 | |
| hsetnx key FIELD VALUE | |
| //获取哈希表中所有的字段 | |
| hkeys key | |
| //获取所有哈希表中的字段值 | |
| hvals key | |
| //获取所有哈希表中的字段和字段值 | |
| hgetall key | |
| //获取所有哈希表中字段的数量 | |
| hlen key | |
| //查看哈希表key中,指定的字段是否存在 | |
| hexists key field | |
| //为哈希表key中的指定字段的整数值加上增量increment | |
| hincrby key FIELD_NAME INCR_BY_NUMBER | |
| //为哈希表中的字段值加上指定浮点数增量值10.23 | |
| hincrbyfloat key FIELD_NAME INCR_BY_NUMBER | |
| hincrbyfloat jd price 10.23 | |
| //删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。 | |
| hdel key field field2 | |
| ----------------------set集合类型操作,不能出现重复的值,只能唯一------------------------,-------------------------- | |
| //添加一个string元素到key对应的set集合中,成功返回1,类似数组模式,如果元素已经在集合中,返回0,key对应的set不存在返回错误 | |
| sadd key memeber | |
| //从key对应set中移除指定元素 | |
| srem key member [member] | |
| //从p1对应set中移除member并添加到p2对应set中 | |
| smove p1 p2 zhangsan | |
| //返回set的元素个数 | |
| scard key | |
| //判断member是否在set集合中 | |
| sismember key member | |
| //返回所有给定key的交集 | |
| sinter key1 key2 keyN | |
| //返回所有给定key的并集 | |
| sunion key1 key2 keyN | |
| //返回所有给定key的交集 | |
| sdiff key1 key2 keyN | |
| //返回key对应set的所有元素,结果是无序的 | |
| smembers key | |
| //随机删除集合中一个元素,并返回 | |
| spop key | |
| //返回集合的交集 | |
| sinter key key1 | |
| //返回交集,保存在destination集合中 | |
| sinterstore destination key1 key2 | |
| //返回并集 | |
| sunion key [key1] | |
| //返回并集,保存在destination集合中 | |
| sunionstore destination key1 key2 | |
| //返回差集,确定前后关系,最终结果中保留的是前面集合的元素 | |
| sdiff key key1 | |
| //返回差集,保存在destination集合中 | |
| sdiffstore destination key1 key2 | |
| //返回集合中的一个随机元素 | |
| srandmember key | |
| -------------------sort set类型操作,有序集合,且是唯一的-------------------------- | |
| 适用于最热门前5个帖子 | |
| //添加元素到集合,元素在集合中存在则更新对应的score | |
| zadd key score member | |
| 例子:zadd key 398 16 -------398是权,16是文章ID | |
| //删除指定元素,1表示成功,如果元素不存在返回0 | |
| zrem key member | |
| //按照incr 幅度增加对应member的score值,返回score值 | |
| zincrby key incr member | |
| 例子:zincrby key 300 11 ------id为11的,增加权重300 | |
| //返回指定元素在集合中的排名(下标),集合中元素按score从小到大排序的 | |
| zrank key member | |
| //返回指定元素在集合中的排名(下标),集合中元素按score从大到小排序的 | |
| zrevrank key member | |
| //类似lrange操作从集合中去指定区间的元素。返回的是有序结果(小到大排序) | |
| zrange key start end | |
| //类似lrange操作从集合中去指定区间的元素。返回的是逆顺序结果(大到小排序) | |
| zrevrange key start end | |
| //返回集合中元素个数 | |
| zcard key | |
| //返回给定元素对应的score | |
| zscore key element | |
| //删除集合中排名在给定区间的元素,是从小到大排序的 | |
| zremrangebyrank key min max | |
| 例子:zremrangebyrank key 0 0 -------每增加一个新权重,就把旧的最后一名剔除,刚好又是小到大排序,所以 0 0 | |
| //返回有序集合key中,score值在min和max之间(默认包括score值等于min或max)的成员数量 | |
| zcount key min max | |
| //返回有序集合key中,成员member的score值 | |
| zscore key member | |
| //返回有序集合key中,指定区间内的成员按score值从大到小来排列 | |
| //选项,来让成功和它的score值一并返回 | |
| zrevrange key start stop [withscores] | |
| //返回有序集合key中,所有score值介于min和max之间(闭区间),start可以大于stop,代表从大到小 | |
| zrangebyscore key start stop | |
| //返回成员的排名 | |
| zrank key member | |
| //为有序集合key的成员member的score值(权重)加上增量increment | |
| zincrby key increment member | |
| ----------------------------------事务---------------------------------------------4 | |
| //取消事务,放弃执行事务块内的所有命令。 | |
| discard | |
| //执行所有事务块内的命令 | |
| exec | |
| //标记一个事务块的开始 | |
| multi | |
| //取消watch命令对所有key的监视。 | |
| unwatch | |
| //监视一个(或多个)key,如果在事务执行之前这个(或这些)key 被其他命令所改动,那么事务将被打断 | |
| watch key [key] | |
| -----------------------redis.conf配置------------------------------- | |
| dbfilename dump.rdb #保存持久化的数据文件名 | |
| # The working directory. | |
| # | |
| # The DB will be written inside this directory, with the filename specified | |
| # above using the 'dbfilename' configuration directive. | |
| # | |
| # The Append Only File will also be created inside this directory. | |
| # | |
| # Note that you must specify a directory here, not a file name. | |
| dir ./ #保存持久化的数据路径 | |
| save 900 1 #15分钟,有一个Key发生变化即发起快照 | |
| save 300 10 #5分钟,有十个Key发生变化即发起快照 | |
| save 60 10000 #60s,有10000Key发生变化即发起快照 | |
| //手动发起快照 | |
| ./redis-cli bgsave | |
| ###开启AOF会清空所有旧记录 | |
| //开启AOF持久化,相当于把写的指令备份起来,恢复的时候再执行,这样就可以达到每秒持久化效果 | |
| appendonly no 改为 appendonly yes | |
| # The name of the append only file (default: "appendonly.aof") | |
| appendfilename "appendonly.aof" | |
| //AOF备份频率 | |
| # appendfsync always #一直备份,最安全,但最耗资源 | |
| appendfsync everysec #每秒备份,较安全,较耗资源 | |
| # appendfsync no #空闲才备份,不安全,少耗资源 | |
| //appendonly.aof与dump.rdb 关系,不是替代关系,是两个一起协助的,dump.rdb是负责大数据,appendonly负责小数据 | |
| -----------优化压缩aof文件----------- | |
| 127.0.0.1:6379> BGREWRITEAOF #比如使用了多个incr num,压缩成一个 | |
| ------------redis持久化相关命令--------- | |
| 127.0.0.1:6379> bgsave #异步保存数据到硬盘里面(快照保存) | |
| 127.0.0.1:6379> lastsave #返回上次成功保存到磁盘中的时间戳 | |
| 127.0.0.1:6379> shutdown #同步保存到服务器并关闭redis服务 | |
| ----- | |
| -----------redis服务端启动--------------- | |
| /etc/init.d/redis start | |
| ./redis redis.conf -------指定配置文件启动 | |
| -----------------------------主从模式-------------------------------------------- | |
| //设置本服务器是从服务器,默认只读,不写 | |
| # slaveof <masterip> <masterport> | |
| slaveof 192.189.11.3 6379 #这里是填写远程主服务器 | |
| //默认只读,不写 | |
| slave-read-only yes | |
| =============================redis的过期策略以及内存淘汰机制============================ | |
| 定期删除+惰性删除是如何工作的呢? | |
| 定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,redis不是每个100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis岂不是卡死)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。 | |
| 于是,惰性删除派上用场。也就是说在你获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除。 | |
| 采用定期删除+惰性删除就没其他问题了么? | |
| 不是的,如果定期删除没删除key。然后你也没即时去请求key,也就是说惰性删除也没生效。这样,redis的内存会越来越高。那么就应该采用内存淘汰机制。 | |
| 在redis.conf中有一行配置 | |
| # maxmemory-policy volatile-lru | |
| 该配置就是配内存淘汰策略的(什么,你没配过?好好反省一下自己) | |
| 1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。应该没人用吧。 | |
| 2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。推荐使用,目前项目在用这种。 | |
| 3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。应该也没人用吧,你不删最少使用Key,去随机删。 | |
| 4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把redis既当缓存,又做持久化存储的时候才用。不推荐 | |
| 5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。依然不推荐 | |
| 6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。不推荐 | |
| ps:如果没有设置 expire 的key, 不满足先决条件(prerequisites); 那么 volatile-lru, volatile-random 和 volatile-ttl 策略的行为, 和 noeviction(不删除) 基本上一致。 | |
| ================================安装php-redis扩展==================================================== | |
| tar -zxvf redis-3.1.3.tar.gz | |
| cd redis | |
| /usr/local/php/bin/phpize | |
| ./configure --with-php-config=/usr/local/php/bin/php-config | |
| make clean | |
| make | |
| make install | |
| #执行完make install后会生成 | |
| #Installing shared extensions: /usr/local/php//lib/php/extensions/no-debug-non-zts-20060613/ | |
| #修改php.ini | |
| vi /usr/local/php/etc/php.ini | |
| #查找extension_dir,修改为 | |
| extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" | |
| #添加redis | |
| extension = redis.so | |
| #重启php-fpm | |
| service httpd restart | |
| //redis配置文件 | |
| sudo mkdir /usr/local/redis/bin | |
| sudo mkdir /usr/local/redis/etc | |
| cp ~/redis-3.1.3/redis.conf /usr/local/redis/etc | |
| cp ~/redis-3.1.3/src/redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server /usr/local/redis/bin | |
| #redis-benchmark 是测试redis性能 | |
| #设置守护进程启动 | |
| vim /usr/local/redis/etc/redis.conf | |
| daemonize yes | |
| //单独启动redis | |
| /usr/local/redis/redis-server /usr/local/redis/etc/redis.conf | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment