redis将散裂中某个值自增_Redis常用命令
redis简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的
redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis基础类型
string 可以存储字符串、整数或者浮点数
list 链表,链表上每个节点都包含了一个字符串
set 包含了字符串的无序集合,并且集合里面的字符串都是唯一的
hash 包含键值对的无序散列值(类似于关系型数据库里面的行记录)
zset 字符串成员,与浮点数分支之间的有序映射,元素排列顺序跟分值决定
1.字符串(String)
redis当中的字符串跟c#里面的string字符串非常相似,字符串可以存储三种数据类型,字符串、整数、浮点数,字符串的一些常规操作之类,大概如下:
setkey value 设置一个key,值为valuegetkey 获取存储的值
del key 删除指定的值
incr Key 如果是数字类型自增1,如果是字符串或者浮点数会报错
decr Key 如果是数字类型自减1,如果是字符串或者浮点数会报错
incrBy Key amount 给key添加整数amount
decrBy Key amount 给key减去整数amount
append Key Value 把value内容追加到key的结尾
getrange Key start end 获取从start开始到end结束,的key的内容值(例如:test)
setrange Key start value 往key当中起始位置start当中添加字符串
1.1 设置一个key值(set key)
设置一个键名为strkey,值为helloworld,set命令如果执行成功会返回ok。
1.2 获取一个key值(get key)
获取刚才设置的键,键的值为helloworld,跟刚才设置的一样
1.3 删除一个key值(del key)
下面删除刚才创建的string字符串,当对值在删除的时候,del命令将返回被成功删除的值得数量。
在此获取的时候,由于刚才的键已经被删除了,所以返回了nil
1.4 数字类型自增(incr key)
数字类型能够正常自增,float和字符串类型的都会报错
1.5数字类型自减1(decr key)
数字类型正常自减,并且不支持字符串和浮点型
1.6 字符串内容追加(append key Value)
字符串内容追加,不管是整型,还是浮点型或者字符串都可以往字符串的最后追加内容,示例中整数和字符串都可以正常添加
1.7 获取字符串当中的某一段内容(getrange start end)
下图演示获取strKey当中的从开始位置到结束位置的内容
1.8 往字符串当中任意位置插入内容(setrange start value)
往键strkey当中的任意位置添加内容。
2.redis中的列表(List)
redis对链表的结构的支持,使得它在键值存储的世界中独树一帜,一个列表结构可以有序地存储多个字符串。注意key的值区分大小写
rpush listKey value 将键为listKey的值推入列表的右端
lpush listKey value 将键为listKey的值推入列表的左端
lrange listKey0 -1 获取键listKey范围的值,0代表范围的起始索引值,-1代表获取listkey所有的值
lindex listKey value 获取键listKey里是否包含值value
lpop ListKey 从列表的左端弹出一个值,并且返回弹出的值
rpop listKey 从列表的左端弹出一个值,并且返回弹出的值
ltrim listKey start end 从下标start开始到end结束,截断listkey的值
blpop listkey time 如果listkey最左端存在元素那么正常弹出,如果listkey为空将阻塞time秒之后或者有元素之后,从左侧弹出
brpop listkey time如果listkey最右端存在元素那么正常弹出,如果listkey为空将阻塞time秒之后或者有元素之后,从右侧弹出
rpoplpush listkey listkey1 把listkey当中的元素推倒listkey1最左侧
brpoplpush listkey listkey1 time 把listkey当中的元素推倒listkey1最左侧,如果listkey不存在元素,那么等待time秒或者有元素之后,在放到listkey1当中
2.1 往list的右端添加一个值,插入成功显示1
2.2 往list的左端添加一个值,插入成功显示1
2.3 查看listKey范围值
2.4 从列表弹出一个值,并且返回
第一步显示为nil是由于大小写不对,所以在设置key的时候要注意大小写。
第二步从list的左侧弹出一个值,并且显示
第三步从list的右侧弹出一个值,
第四步查看list的值,由于都已经弹出,所以此时list为空
2.5 集合截断(ltrim key start end)
ltrim 截断字符串,从开始位置,到结束位置
2.6 阻塞弹出(blpop strkey value)
2.7 把一个集合里面的内容放到另一个集合(Rpoplpush strkey strkey1)
3.Redis集合(Set)
redis的集合和链表都可以存储多个字符串,不同点是链表可以存储相同的字符粗换,而集合则是通过使用散列表来保证自己存储的每个字符串都是不一样的。
redis的集合是无序方式存储元素,所以不能像链表一样从某一端弹出元素
sadd Key value 将值value添加到Key集合
smembers Key 返回集合的所有元素
sismember Key value 检查值value是否存在指定key当中
srem Key value 如果元素value存在key集合当中,那就移除这个值
scard Key 获取集合的数量
spop Key 随机删除一个key
srandmember Key value 随机获取value个元素,如果value是正数,元素不会重复,如果是负数元素会重复
smove Key Key1 Value 如果key当中包含value,那么从集合key删除这个value,并且添加到key1当中,如果成功返回1,失败返回0
3.1 添加一个值到集合当中
第一步:添加值item到键为setkey里面。
第二步:再次添加发现已经存在,故添加失败,返回结果0.
3.2 获取集合当中所有元素
3.3 检查元素是否存在
第一步:检查setkey当中是否存在item,返回结果1,表示存在。
第二步:检查setKey当中是否存在item1,返回结果0,表示不存在。
3.4 检查元素如果存在就删除
删除item1由于setkey不存在该值,所以删除失败,返回0。
删除item,setkey存在该值,删除成功。
4.redis散列(Hash)
redis的散列可以存储多个键值对,散列存储的值既可以是字符串,也可以是数字。类似于关系型数据当中的行,可以保存多个键值对
hset hashKey subKey value 添加散列的键值对hashKey是散列值,subKey是键
hget hashKey subKey 获取散列键值对某个键的值
hgetall hashKey 获取散列包含的所有键值对
hdel hashKey subKey 如果散列存在subKey,那就删除该subKey键
hkeys hashKey 获取所有键
hvals hashKey 获取所有值
hmset hashKey value hashKey value 批量添加
hexists hashKey subKey 检查subkey是否存在
hincrby hashKey subKey num 给hashkey当中的subKey的值添加整数num
4.1 添加散列
添加散列,从下图可以看出,散列当中也不能插入相同的键
4.2 获取指定key的值
如果存在直接返回给定的值,不存在返回nil
第三步返回所有值
4.3 移除键
5.有序集合(ZSet)
有序集合和散列一样都存储键值对,有序集合的值只能存浮点数。并且有序集合是为一个一个既可以根据值返回元素,又可以根据value的排序来访问元素
zadd zsetKey 1member1 将一个分值添加到有序集合里面
zrange zsetKey0 -1withscores 获取有序集合所有元素,并且按照大小进行排序
zrangebyscore zsetKey0 100withscores 按照范围获取集合里面的部分元素
zrem zsetKey member1 删除某一个元素
zrank zsetKey member 查看member在集合zetkey当中的位置
zscore zsetKey member 查看member在集合zsetkey中的位置
5.1添加元素
第一步:添加100到键member1当中,添加成功
第二步:由于zsetKey当中已经存在member1,添加失败
第三步:同第二步
第四步:添加100到键member3当中。
第五步:添加字符串到member3当中,添加失败,并且给与提示只能添加浮点型。
5.2 获取有序集合当中的所有键值对
5.3 按照返回获取键值对
5.4 移除一个元素
删除zsetKey当中member1
持久化模式
redis将内存中的数据存储到硬盘的主要原因就是为了重用数据,或者是防止系统故障将数据备份到一个远程位置,Redis提供了两种持久化方案,将数据存储到硬盘里面:
快照(snapshotting) : 将存储在某一时刻的所有数据都写入硬盘里面
AOF(Append-only file): 它会在执行写命令时,将被执行的写命令复制到硬盘里面
快照模式
redis 通过创建快照获取存储在内存里面的数据在某个时间点上的副本,在创建快照之后,用户可以对快照进行备份,
save 60 1000 //60秒内有1000次写入就触发bgsave命令来创建一个快照stop-writes-on-bgsave-error no //当硬盘因为权限等原因无法写入时,停止写入
rdbcompression yes //指定存储至本地数据库时是否压缩数据,默认是yes,redis采用LZF压缩,如果为了节省CPU时间 ,可以关闭该选项,但会导致数据库文件扁的巨大
dbfilename dump.rdb //快照名称
AOF持久化
aof持久化会将执行的写命令写到aof文件的末尾,以此来记录数据发生的变化
appendonly no //是否每次更新操作后进行日志记录,如果不开启可能会在断电导致一段时间内的数据丢失
appendfsync everysec //写入策略; always:每次更新操作后手动调用fsync()将数据写到磁盘(满,安全);everysec:每秒同步一次(折中,默认值);no:等操作系统进行数据缓存同步到磁盘
no-appendfsync-on-rewrite no //如果该参数是no是最安全的方式,不会丢数据,但是会阻塞;如果是yes,相当于appendfsync设置为No
auto-aof-rewrite-percentage 100 //aof文件增长比例,指当前aof文件比上次重写的增长比例大小。auto-aof-rewrite-min-size 64mb //aof文件重写最小的文件大小,aof必须达到这个文件时才出发。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)