您的位置:首页 > 数据库 > Redis

redis之key、string、list、set、sort set、hash、精细持久化、snapshotting快照保存、主从模式

2017-06-25 12:34 731 查看
keys:在redis里面,除了"\n"和空格不能作为名字外,其他都可以,长度不做限制;
命名时:key不要太长,占内存,查询慢;也不要太短,不容易识别

exists key:测试指定key是否存在

del key:删除key

type key:返回给定key的类型

keys pattern:返回指定模式的所有key(例:keys *e:返回以e结尾的key)

rename oldkey newkey:改名字

dbsize:返回当前数据库的key数量

expire key seconds:为key指定过期时间

ttl key:返回key的剩余过期秒数

select db-index:选择数据库(只有16个数据库0-15)

move key db-index:将key从当前数据库移动到指定数据库

flushdb:删除当前数据库中的所有key

flushall:删除所有数据库中的key

string:

set:设置值

mset key1 value1 key2 value2...:一次性设置多个值

mget key1 key2:一次性获取多个key

incr key:对key进行累加1操作,可操作已有key和新key,要求key的信息值必须为整形的;类似于++

decr key:

incrby key integer:加指定值

decrby key integer:减指定值

append key value:给指定的key的字符串值追加value

substr key start end:返回截取过的key的字符串值(包括start和end)

lpush key string:在key对应的list的头部添加元素,

rpop key:从list的尾部删除元素,并返回删除元素

llen key:对应list的长度,key不存在返回0,如果key对应的类型不是list返回错误

lrange key start end:返回指定区间上的元素,下标从零开始

rpush key string:同上,在尾部添加

lpop key:从list的头部删除元素,并返回删除元素

ltrim key start end:截取list,保留指定区间内元素;start和stop参数都是0-based,0表示头部元素。和其他命令一样,start和stop也可以为负值,-1表示尾部元素。如果start大于链表的尾部,或start大于stop,该命令不错报错,而是返回一个空的链表,与此同时该Key也将被删除。如果stop大于元素的数量,则保留从start开始剩余的所有元素。

lrem key count value:在指定Key关联的链表中,删除前count个值等于value的元素。如果count大于0,从头向尾遍历并删除,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。如果指定的Key不存在,则直接返回0。

lset key index value:设定链表中指定位置的值为新值,其中0表示第一个元素,即头部元素,-1表示尾部元素。如果索引值Index超出了链表中元素的数量范围,该命令将返回相关的错误信息。

lindex key index:该命令将返回链表中指定位置(index)的元素,index是0-based,表示头部元素,如果index为-1,表示尾部元素。如果与该Key关联的不是链表,该命令将返回相关的错误信息。

linsert key BEFORE|AFTER pivot value:该命令的功能是在pivot元素的前面或后面插入参数中的元素value。如果Key不存在,该命令将不执行任何操作。如果与Key关联的Value类型不是链表,相关的错误信息将被返回。返回值:成功插入后链表中元素的数量,如果没有找到pivot,返回-1,如果key不存在,返回0。

rpushx key value:仅有当参数中指定的Key存在时,该命令才会在其所关联的List Value的尾部插入参数中给出的Value,否则将不会有任何操作发生。 返回插入后链表中元素的数量。

rpoplpush source destination:原子性的从与source键关联的链表尾部弹出一个元素,同时再将弹出的元素插入到与destination键关联的链表的头部。如果source键不存在,该命令将返回nil,同时不再做任何其它的操作了。如果source和destination是同一个键,则相当于原子性的将其关联链表中的尾部元素移到该链表的头部。返回弹出和插入的元素。 

set:是string类型的无序集合

set元素最大可以包含(2的32次方-1)个元素,可对set集合取并集,交集,差集(可实现qq好友推荐功能)

注意:每个集合中的各个元素不能重复。

sadd key value:添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误

srem key member [member]:从key对应的set中移出给定元素,成功返回1

smove p1 p2 member:从p1对应的set中移除member并添加到p2对应的set中

scard key:返回set的元素个数

sismember key member:判断member是否在set中

sinter key1 key2....:返回所有给定key的交集

sunion key1 key2....:返回所有给定key的并集

sdiff key1 key2....:返回所有给定key的差集

smembers key:返回key对应set的所有元素,结果是无序的

spop key :随机的移除并返回Set中的某一成员。 由于Set中元素的布局不受外部控制,因此无法像List那样确定哪个元素位于Set的头部或者尾部。;返回移除的成员,如果该Key并不存在,则返回nil。

srandmember key :和SPOP一样,随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员。

SDIFF key [key ...]:返回参数中第一个Key所关联的Set和其后所有Keys所关联的Sets中成员的差异。如果Key不存在,则视为空Set。

SDIFFSTORE destination key [key ...] :该命令和SDIFF命令在功能上完全相同,两者之间唯一的差别是SDIFF返回差异的结果成员,而该命令将差异成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。

SINTERSTORE destination key [key ...]:该命令和SINTER命令在功能上完全相同,两者之间唯一的差别是SINTER返回交集的结果成员,而该命令将交集成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。返回交集成员的数量。 

SUNIONSTORE destination key [key ...] :该命令和SUNION命令在功能上完全相同,两者之间唯一的差别是SUNION返回并集的结果成员,而该命令将并集成员存储在destination关联的Set中。如果destination键已经存在,该操作将覆盖它的成员。返回并集成员的数量。

sort set:string类型的元素集合(排序集合)(例:热门帖子)

zadd key score member:添加元素到集合,元素在集合中存在则更新对应score

zrem key member:删除指定元素,1表示成功,如果元素不存在返回0

zincrby key incr member:按照incr幅度增加对应member的score值,返回score值

zrank key member:返回指定元素在集合中的排名(下标),集合中的元素是按score从小到大排序

zrevrank key member:同上,但是集合中元素是按score从大到小排序

zrange key start end:类似lrange操作从集合中去指定区间的元素。返回的是有序结果

zrevrange key start end:同上,返回结果是按score逆序的

zcard key
b4ef
:返回集合中元素个数

zscore key element:返回给定元素对应的score

zremrangebyrank key min max:删除集合中排名在给定区间的元素

hset key field value:设置

hget key field:

hmget key field1 field2...:

hmset key field1 value1 field2 value2.....:

hincrby key field integer:将指定的hash field加上指定值

hexists key field:测试指定field是否存在

hdel key field:删除指定的hash field

hlen key:返回指定hash的field数量

hkeys key:返回hash的所有field

hvals key:返回hash的所有value

hgetall key:返回hash的所有field和value

append only file(AOF持久化:精细持久化)
把修改的每个key都保存起来,并且频率可以达到秒级

ps -A | grep redis:查看redis服务器相关运行程序和进程

kill -9 进程号:杀死进程,不安全,有可能丢失数据

set nu:设置dos窗口显示行

开启AOF持久化(会清空redis内部的数据)

(同时可以修改备份文件的名字,默认是appendonly.aof)

配置文件被修改,需删除旧进程,根据新配置文件重启新进程

appendoly yes:启用aof持久化方式

appendfilename appendonly.aof:保存命令的文件

appendfsync always:每次收到写命令就立即强制写入磁盘,服务器最慢的,但是保证完全的持久化,不推荐使用

appendfsync everysec:每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

appendfsync no:完全依赖os,性能最好,持久化没保证

手动执行aof:./redis-cli bgrewriteaof

snap shotting 快照持久化
该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据比较多就不适合频繁进行此操作
默认文件名:dump.rdb

vi/vim 文件名:查看文件

save 900 1  #900秒内如果超过1个key被修改,则发起快照保存

save 300 10 #300秒内超过10个key被修改,发起快照

save 60 10000 #60秒内超过10000个key被修改,发起快照保存

以上三个save的意思:

数据修改的频率非常高,备份的频率也高

数据修改的频率低,备份的频率也低

快照持久化文件的名字和存储的位置: dbfilename dump.rdb

redis持久化相关命令

bgsave:异步保存数据到磁盘

lastsave:返回上次成功保存到磁盘的unix时时间戳

shutdown:同步保存到服务器并关闭redis服务器

bgrewriteaof:当日志文件过长时优化AOF日志文件存储

./redis-cli -h 127.0.0.1 -p 6379 bgsave  #手动发起快照持久化

为了降低每个redis服务器的负载,可以多设置几个,并做主从模式,一个负责写数据,其他服务器负责读数据

主服务器数据会“自动”同步给从服务器

想成为谁的从服务器,更改配置文件:redis.conf
slaveof 对方的IP地址 对方服务器的端口号(重启服务器生效。但此时自己只能读不能写)
如果自己需要写数据,需要修改配置文件:slave-read-only yes
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis初级 redis