字符串
set email wy04131@126.com
get email
setnx email wy04131@126.com 如果存在这个key,则更新失败返回整型0
setex email 10 wy04131@126.com 设定key的有效期为10秒
setrange email 7 qq.com 将字符串的第七位开始换成qq.com,7为下标,从0开始,返回新字符串的长度 替换完成后原来字符串剩余的长度内容不变
getrange email 0 5 获取字符串的第0 - 5 位字符
mset key1 value1 key2 value2 批量设置,成功返回ok,失败则全部失败,返回0
mget key1 key2 key3 .......批量获取,不存在的key返回 nil
msetnx 批量复制,返回1全部成功,失败(即全部失败,本次操作不会覆盖原有的值)则返回0
getset emai loujing@qq.com 设置新值,返回旧值
incr key 对key的值自增,并返回,如果key不存在,则设置,并认为原来的value为0
incrby key n 对key的值自增,n为步长,并返回,如果key不存在,则设置,并认为原来的value为0
decr和decrby 同incr类型,其实incr也支持负数来实现decr,反之decr 也可用负数实现incr
append key new_value 给key追加value,相当于拼接字符串,返回新字符串的长度
strlen key 返回字符串的长度
哈希
hset myhash filed value 设置哈希表myhash的字段field的值为value,如果不存在则设置,成功返回1,(应用场景存用户的信息比较方便)
hget myhash field 获取哈希表中的字段field
hmget myhash field1 field2 获取指定所有键
hsetnx 同字符串的,不存在则创建,存在则返回0
hmset myhash field1 value1 field2 value2 批量设置,成功返回ok
hincrby myhash field n 其中n为步长,可以为负数
hexists myhash field 哈希表中是否存在指定filed,返回1或0
hlen myhash 返回哈希表中filed的数量
hdel myhash filed 删除指定field 成功返回1
hkeys myhash 返回哈希表中所有字段
hvals myhash 返回哈希表中所有字段的值
hgetall myhash 获取哈希表中所有的filed 和value
list
lpush list “value” 向列表头部压入字符串,返回的是list里元素的数量,注意这里的字符串值要加引号,不加是否能行待测试
rpush 同上,只不过是从尾部压入
linsert list before “value1” “value2” 在value1前面压入元素value2
lrang list 0 -1 0是头部第一个元素,-1是尾部最后一个元素 全部取出
lset list n “value” n为下标,替换list中下标为n的元素为value,成功返回ok
lrem list n value 删除列表中n个和value值相等的元素(就是删除列表中n个value),n<0 从尾部删除;n=0 全部删除;返回成功删除的数量; 如 lrem list 1 “wangong” 删除list中1个和 “wangyong”相同的值
ltrim list m n 保留下标m - n的元素,其余的全删除,成功返回ok
lpop list 删除list的头部第一个元素,病返回这个删除的元素
rpop list 同上
rpoplpush list1 list2 从list1尾部弹出元素添加到list2头部,返回弹出这个元素,见图一
lindex list n 返回指定下标为n的元素,取不到返回nil
llen list 返回list中元素的数量
集合
sadd myset value 向集合中添加元素,成功返回1,已经存在返回0
smembers myset 查看集合中的元素
srem myset value 删除指定元素,成功返回1,不存在返回0
spop myset 随机删除一个元素,并返回这个元素
sdiff myset1 myset2 返回两个集合的差集
sdiffstore myset3 myset1 myset2 将myset1 和myset2 的差集结果存储到myset3 中,成功返回1
sinter myset1 myset2 返回所有指定集合的交集
sinterstore myset myset1 myset2 将myset1和myset2的交集存储到myset中,成功返回1
sunion myset1 myset2 返回所有指定集合的并集
sunionstore myset myset1 myset2 将并集结果存储到myset中,返回新集合的元素个数
smove myset1 myset2 value 将集合1中的元素value移动到集合2中,成功返回1
scard myset 返回集合元素的个数
sismember myset value 查看value是否是集合中的元素,返回1或0
srandmember myset 随机返回集合中的一个元素,但不删除
有序集合
zadd myset n value 向有序集合添加元素,n为下标,如果该值存在返回0,添加失败,但是更新其下标,如图2
zrange myset 0 -1 <withscores> 先从小到大排序,再取全部值,withscores 显示下标
zrevrange myset 0 -1 <withscores> 同上,排序是从大到小
zrangbyscore myset m n <withscores> 按下标找m到n元素并返回,即返回给定区间的元素
zcount myset m n 返回指定区间元素的数量
zcard myset 返回集合里的所有元素的数量
zrem myset value 删除指定集合中的元素值,成功返回1
zincrby myset n value 使集合中的值value的下标增加n,如果这个值不存在则创建,返回最后的下标值
zrank myset value 先把集合元素按下标从小到大排序,再返回集合中value值的索引,不是下标
zrevrank myset value 同上,排序时是从大到小
zremrangebyrank myset m n 删除给定索引区间的元素,这里mn是索引,返回删除元素的个数
zremrangebyscore myset m n 删除给定下标区间的元素,这里mn是下标,返回删除元素的个数
键值相关命令
keys pattern 返回所有键×为所有 my× my开通的键
exists key 是否存在键key 返回1或0
del key 删除key 返回1或0
expire key 10 设置key的有效期为10秒,key必修存在,否则报错
persist key 移除指定key的过期时间
ttl(TTL)key 查看key还有多久过期 -1为过期
select 0 选择数据库,默认进入0数据库
move field 1 将field移动到1数据库
config get databases 获取数据库个数
randomkey 随机返回库中的key
rename old_key new_key 重命名key 返回ok代表成功
type key 返回指定key的数据类型 none 表示key不存在
服务器相关命令
ping 链接redis是否正常 返回PONG为正常
echo 输出
select 0 选择数据库,默认进入0数据库 0-15共16个
quit 退出连接 exit/ctrl +c
dbsize 返回当前数据库中所有key的数量
inof 获取服务器信息,版本号等
config get 获取服务器配置信息,× 代表所有 信息
flushdb 删除当前选择库中的所有key
flushall 删除所有库中所有key 完全清空,返回ok为成功
高级应用
安全性
配置文件中设置requirepass 密码,登录客户端使用 auth 密码 即可
或 redis-cli -a 密码 启动时带着参数输入密码
主从复制
master可以拥有多个slave
多个slave可以连接同一个master外,还可以连接其他slave(主机宕掉可自动提升为主机)
主从复制不会阻塞maser,同步数据时可同时处理client的请求,
提高系统的伸缩性
配置方法
slave
slaveof 主机ip 端口
masterauto 主机密码
master
无需配置
事物处理
redis 事物支持比较简单,如果事物中某一条命令出现,不会让整个事物回滚,只会报出这条错误
multi打开事物,陆续再输入其他命令,不会立即执行,会放入一个队列中,直到执行 exec命令时,才按顺序执行
discard回滚 取消当前事物中的所有命令
watch key对某个key监控 如果key被修改过,则提交的事物不成功,返回nil
持久化存储
快照保存(也是默认方式)save 900 1 意为900秒内有一个key被修改过,则发起快照保存; save 300 10意为300秒内有超过10个key被修改过,则发起快照保存
aof方式 因为快照方式是每隔多少秒进行一次快照,redis一旦宕机,会丢失最后一次快照修改。aof会把每一次收到的写命令通过write命令追加到文件中,即使重新启动也会重新执行文件中的写命令在内存中重建数据库。当然,os会会在内核中缓存write所做的修改,所有可以不是立即写到磁盘上,即aof方式也会造成部分数据丢失,我们可通过配置文件,告诉redis我们想要通过fsync函数强制os写入磁盘的时机
aof配置
appendonlyyes 打开此项,及开启aof
appendsync always 收到写命令即写入,最慢,但最安全,数据最全
appendsync everysec 每秒写入一次,性能和持久化做了很好的折中
appendsync no 完全依赖操作系统,性能最好,无法保证数据
总结:快照方式会在磁盘上生成dump文件,保存的是二进制的数据文件;aof也会生成文件,以aof结尾的,但是里面存储的是操作命令,可以使用cat查看。