Skip to content

Instantly share code, notes, and snippets.

@jingmian
Last active November 22, 2018 14:06
Show Gist options
  • Select an option

  • Save jingmian/7ee1ef7b6de69c613a76dc172874d1bc to your computer and use it in GitHub Desktop.

Select an option

Save jingmian/7ee1ef7b6de69c613a76dc172874d1bc to your computer and use it in GitHub Desktop.
.txt
---------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