老郑的博客

木叶飞舞之处,火亦生生不息!

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字符串非常相似,字符串可以存储三种数据类型,字符串、整数、浮点数,字符串的一些常规操作之类,大概如下:

set      key     value                 设置一个key,值为value
get      key                           获取存储的值
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        listKey   0 -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       1         member1                      将一个分值添加到有序集合里面
zrange                    zsetKey       0  -1                withscores        获取有序集合所有元素,并且按照大小进行排序
zrangebyscore             zsetKey       0  100               withscores        按照范围获取集合里面的部分元素
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必须达到这个文件时才出发。

 

posted @ 2019-08-25 09:40  zyz1  阅读(297)  评论(0编辑  收藏  举报