#strings类型
##设值 ####设单个值
set key value
####如果不存在,设一个值
setnx key value
//nx: not exists
####设置过期时间(expired time)
setex key [number] value
//number为有效期,有效期过后,值为nil
####把number索引后面替换为value
setrange key [number] value
####设置多个值
mset key1 value1 key2 value2 …
####批量设值
msetnx key1 value1 key2 value2 …
//设值全部成功或全部回滚
##取值
get key
####设置key值,并返回key的旧值
getset key value
####获取指定区间的子字符串
getrange key number1 number2
####批量获取key值,不存在的返回nil
mget key1 key2 key3 …
##值操作
####自增1
incr key
####增加指定值
incrby key number
####自减1
decr key
####减去指定值
decry key number
####拼接字符
append key value
####取key的value长度
strlen key
#hashes类型
####创建hash数据结构,指定key值为value
hset hash_name key value
####如果不存在,设置新值
hsetnx hash key value
####批量设定hash的多个field
hmset hash key1 value1 key2 value2 …
####获取hash指定的key值
hget hash key
####获取指定的全部key值
hmget hash key1 key2 …
####给指定的hash field加上定值number
hincrby hash key number
####指定的field是否存在
hexists hash key
####获取指定的hash的field数量
hlen hash
####移除指定的field
hdel hash key
####返回所有key值
hkeys hash
####返回所有value值
hvals hash
####返回所有key value
hgetall hash
#lists类型
链表结构,主要功能是push pop,获取范围内的值
分非阻塞版本(默认)、阻塞版本
####list左侧(或称头部)添加值value
lpush list value
####list右侧(或称尾部)添加值value
rpush list value
####在key对应list的位置之前/之后插入元素value
linsert list before/after key value
设置list中指定下标元素值
lset list index value
####从list中删除count个value值
lrem list count value
####保留指定区间的值
ltrim list index1 index2
####弹出顶部元素并返回该值
lpop list
同上,底部
rpop list
####弹出list1底部元素,并添加到list2头部,返回该值
rpoplpush list1 list2
####返回value在list中的索引
lindex list value
####返回list长度
llen list
#sets类型 集合,和数学的集合概念相似,有交并差等操作(union、intersection、difference) 无序string类型集合,由hashtable实现,复杂度O(1)
####添加set值
sadd set value
####移除set中的值value
srem set value
随机移除set的value并返回
spop set
####差集
sdiff set1 set2
返回set1于set2的差集(即set1中不存在于set2中的value的集合)
sdiff set1 set2的结果 不等于 sdiff set2 set1的结果
####将set1 set2的差集存储到set3中
sdiffstore set3 set1 set2
####返回set1 set2的交集
sinter set1 set2
将交集存储到set3
sinterstore set3 set1 set2
####并集
sunion set1 set2
####将并集存储到set3
sunionstore set3 set1 set2
####将value从set1移动到set2
smove set1 set2 value
####返回set中元素数量
scard set
####判断value是否是set中元素
sismember set value
####随机获取set值
srandmember set
#Sorted sets类型 : zset set基础上添加了顺序属性,zset会按新的值调整顺序,可以理解为有两列的数据库表,一列为value,一列为排序数值。 zset每个元素会关联一个double类型的score。 sorted set是skip list和hash table的混合体 ####在索引位置添加值value
zadd zest index value
####移除value
zrem zest value
####自增
zincrby zset number value
如果value存在于zset中,其score值增加number
如果value不存在,在zset中增加value,其score值为number
####获取序列编号
zrank zset value
返回value在zset中的序列(按score升序排列),即索引(下标)
####获取反向序列编号
zrevrank zset value
返回value在zset中的序列(按score降序排列),即索引(下标)
####获取反向序列编号
zrevrange zset index1 index2 [withscores]
将zset按照score值降序排列,区间为index1至index2,with scores控制是否显示score值
(测试不通过)
####返回给定socre区间元素数量
zcount zset score1 score2
####返回给定的value的score值
zscore zset value
####移除给定的索引区间的元素
zremrangebyrank zset index1 index2
####移除给定的score区间的元素
zremrangebyscore zset score1 score2
#Redis常用命令
键值相关命令
####返回满足给定的pattern的所有key,如keys * , keys mylist*
keys [pattern]
####确认一个key是否存在
exists key
####移除一个key
del key
####设置过期时间
expire key number
给key设置一个过期时间number,单位秒,ttl key显示剩余时间,过期后值为-2
####设置永不过期
persist key
将expire过程中的key持久化,变成不会不过期状态,持久化之后,执行ttl key值为-1
重命名key
rename key new_name
####返回key的数据类型
type key
####将key移动到其他库
move key schema
#服务器命令
####测试连接是否存活,如果是,返回PONG
ping
####打印内容
echo string
####选择数据库,编号0-15
select number
####退出连接
quit
####返回当前数据库key的数目
dbsize
####获取服务器信息和统计
info
####获取服务器配置信息
config get attribute
####查看全部配置
config get *
####清空当前数据库
flushdb
####清空所有库
flushall
#高级实用特性
##1.安全性,设置密码 ##2.主从复制 master可以有多个slave,slave还可以连接到其他slave。 主从复制不会阻塞master,在数据同步时,master可以继续处理client请求。 ##3.事务控制
####开启事务
multi
####执行事务,提交
exec
####事务回滚
discard
注意:redis 部分事务失败,不会回滚全部事务
####乐观锁
watch key
##4.持久化机制
###快照方式 snapshotting
(1)自动保存快照 配置信息:
save 900 1 #如果900秒内超过1个key被修改,则发起快照保存
save 300 10 #如果300秒内超过1个key被修改,则发起快照保存
save 60 10000 …
过程: 1. redis调用fork,为主进程(父进程)创建一个子进程 2. 父进程继续处理client请求,子进程将内存内容写入临时文件。子进程地址空间内的数据是fork时的整个数据库的快照。子进程不会影响父进程处理client请求。 3.当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。
(2)save / bgsave 手动保存快照,在主线程中完成快照保存,会阻塞所有的client请求。 每次都是将内存数据完整的写入到磁盘,如果数据量大,会引起大量的IO操作,影响性能。
Append-only file方式 记录每次write的操作内容 比快照方式更好
###5.发布及订阅消息pub/sub #####订阅tv1
client1: subscribe tv1
####订阅tv2
client2: subscribe tv1 tv2
####发布tv1消息,client1 client2收到消息
client3: publish tv1 program1
####发布tv2消息,client2收到消息
client3:publish tv2 program2
####批量订阅tv开头的频道内容
psubscribe tv*
###6.Pipeline批量发送请求 可以将多个命令放到一个tcp报文一起发送、返回。
###7.虚拟内存的使用