• Redis


    1.Redis简介

    REmote DIctionary Server(Redis) 是一个key-value存储系统C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型

    Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

    丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

    Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。

    2.Redis安装

    2.1Windows下安装
    下载地址:https://github.com/MSOpenTech/redis/releases

    下载完成后,解压到一个路径, 打开cmd窗口,通过cd命令进入redis的文件夹下,输入命令:redis-server.exe redis.windows.conf 这是启动redis的服务端。其实直接双击运行redis-server.exe也可以。这时候我们启动了redis的服务端。

     

    服务端启动后,这个cmd窗口不要关闭,再打开一个cmd窗口,通过cd命令切换到redis目录下,输入命令redis-cli.exe -h 127.0.0.1 -p 6379。这时候这个cmd窗口就是使用redis的客户端,就可以通过redis命令,操作redis了。其实同样也可以直接启动redis目录下的redis-cli.exe,它会调用默认的host 127.0.0.1port端口号6379

     

    2.2简单入门测试是否安装成功
    输入命令:set akey aaa  设置一个键值对。再通过get命令获取akey对应的value,输 入命令get akey,可以看到控制台输出aaa

    3. Redis操作数据类型

    3.1 String 字符串

    语法:设置值set key value

    获取值get key

    使用:set testKey AAA --设置值

        get testKey --输出AAA

    3.2 Hash 哈希值

    语法:设置值hmset  key  fieldName1 value1  fieldName2  value2

    获取值hmget  key  fieldName【注意:hmget/hget都可以】

    使用:hmset  testKey Name lucy  Age 20--设置值

      hmget  testKey Age---输出20

    Tip:存储对象的值,用Hash

    3.3 List 列表

    一个列表,可以存储232次方个元素,40多亿个,里面的值可以重复

    语法:可以添加一个元素到头部(左边)或尾部(右边)

      设置值 lpush key value或者rpush key value

        获取值 lrange key startIndex  endIndexstartIndex0开始】

    使用:lpush list AAA---在头部插入一个值

      lpush list BBB--在头部插入一个值

      rpush list CCC--在尾部插入一个值

      lrange list  0  2--输出 BBB AAA CCC每个值换行

    3.4 Set 集合

    Set集合是string类型的无序集合,增删查的复杂度都是O(1),集合内的元素是唯一的,插入重复的值,第二次插入的将会被忽略,一个集合,可以存储232次方个元素,40多亿个。

    语法:设置值sadd key value

      删除值srem key value

      获取值smembers key

    使用:sadd testSet AAA--新增值

      sadd testSet BBB--新增值

      sadd testSet AAA--添加重复值,将会返回-1,且不会添加到集合中

      smembers testSet--列出所有值

    3.5 ZSet 有序集合

    Zset 是一个string类型元素的集合,且不允许成员重复,和set结合一样。不同的是zset的每个元素都会关联一个double类型的分数,redis通过这个分数给zset内的元素排序,zset成员是唯一的,但是分数是可以重复的。当添加重复的元素时,新添加的会覆盖前者。

    语法:设置值zadd  key  score  value

      删除值zrem  key  value

      获取值zrangebyscore  key  startScore  endScore【按分数,不是按索引】

    4. Redis各种数据类型的使用场景

    4.1使用场景

     

    4.2使用建议

    Redis支持多个数据库,并且每个数据库的数据是隔离不共享的,并且基于单击才有,如果是集群就没有数据库的概念。一个Redis实例默认支持16个数据库,可以通过配置支持更多,没有上限。每个数据库对外都是一个从0开始递增数字命名,可以通过配置修改这一数字。当客户端与Redis建立连接后会自动选择0号数据库,不过可以随时使用select命令更换数据库,如选择1号数据库:select  1

    Redis 不支持自定义数据库的名字,每个数据库都以编号命名,我们必须自己清晰的记录哪些数据库存储了哪些数据。另外也不支持为每个数据库设置不同的访问密码,所以一个客户端要么可以访问全部数据库,要么一个也访问不了。虽然数据库之间的数据是不共享的,但是他们又不是绝对独立的,比如你可以通过flushall清空一个redis实例中的所有数据,所以同一个redis实例下不适宜存储不同应用程序的数据,虽然你可以这么做,但是不建议这么做,因为假设你要清空一个应用程序的数据,然后你使用了flushall命令,结果把其他应用程序的数据也删除了,这就出问题了。所以不同的应用程序,应该使用不同的Redis实例来存储数据。由于Redis非常轻量级,一个空的Redis实例占用的内存只有1M左右,所以不用担心多个Redis实例会额外占用很多的内存。

    5. Redis命令

    5.1 操作客户端命令
    客户端输入ping,如果输出pong,测试服务端是否启动。

    5.2 key部分相关命令

    del keyName--删除指定名称的键

    Exists keyName--判断某个键是否存在

    Move keyName newDbNumber--将指定键名,移动到别的数据库中去(数字01234...),如move testKey 5--意思就是把当前操作的数据库名字为testKey键移动到5数据库

    Rename keyName newKeyName--修改键名,如果newKeyName原来数据库中已存在,则原来已存在的key会被替换。

    Renamenx keyName newKeyName--修改键名,会先判断newKeyName不存在时,将keyName改名为newKeyName

    Type keyName--返回这个key所保存的数据类型。

    5.3 字符串string相关命令
    get/set读取/设置指定key的值,只能用于获取/设置字符串类型的数据,否则报错

    Set key value ex seconds设置一个键值对,并设置过期时间,单位是秒,超过过期时间,这个值再执行get操作,就返回nil等同于setex

    Set key value px millionseconds设置一个键值对,并设置过期时间,单位是毫秒,超过过期时间,这个值再执行get操作,就返回nil,等同于psetex

    Set key value nx只有在键不存在时,才对键进行设置操作,等同于setnx

    Set key value xx 只有在键存在时,才对键进行设置操作

    Setex key seconds value设置键值对,并设置过期时间,单位是秒

    Psetex key millionseconds value设置键值对,并设置过期时间,单位是毫秒

    setnx key value 只有在key不存在时,设置key的值,意思就是不覆盖

    getset key value将给定key的值设置为value,并返回key原来的old value

    getrange  keyName  startIndex  endIndex获取keyName对应的value中字符串的子串,startIndex0开始,endIndex-1为最后一位,-2倒数第二位,以此类推。StartIndex在字符串中的位置,一定是要在endIndex之前的,比如startIndex=-1,endIndex=-5这样是不允许的,这样导致startIndex在字符串中的位置比endIndex靠后。

    setrange key offset value 将指定key对应的值,从偏移量开始替换为新的值,比如strKey=”A123456789B”,执行setrange strKey 3 333strKey的值变为A123336789B,假设offset偏移量超出了字符串本身的长度,那么原字符串和偏移量之间的空白将用零字节(x00)进行填充

    mget key1[key2,key3...]获取所有给定key的值

    strlen key 返回指定key所存储的字符串的长度

    mset key value [key value...]同时设置多个键值对,这是一个原子性操作,要么都设置成功,要么都不成功

    msetnx key value[key value...]同时设置多个键值对,当且仅当所有给定的key都不存在,如果有存在的key,则全部不成功

    Mget key[key2...]获取指定的多个键的值,如果该键不存在,则返回nil

    incr keykey中存储的数字值增加1,返回加1后的值,原值必须是整数

    incrby key increment key中存储的数字值加上给定增量(必须是整数)

    incrbyfloat key increment  key中存储的数字值加上给定浮点增量,计算结果只保留小数点后17

    decr/decrby减量,类似于incrincrby ,但是它没有decrbyfloat

    append key value如果key已存在,append会将value追加到原来key的值的后面

    5.4 哈希hash命令

        同一个key下,field是不能重复的。

    Hset key field value设置值,如果设置了已存在的field(即使value不一样),它都会返回0,但是value是设置成功的。

    hsetnx key field value 当字段field不存在时,才设置字段的值

    hget key field 获取指定key中的指定字段的值

    hdel key field[field2....]删除多个key指定的字段field

    hexists key field 指定key中的指定字段是否存在

    hgetall key 获取指定key的所有字段和值

    hincrby key field increment 为指定key中的指定字段的整数值加上增量(增量必须是整数,原field的值也必须是整数)

    hincbyfloat key field increment 为指定key中的指定字段的的值加上增量

    hkeys key 获取指定key中的所有字段名称

    hlen key 获取指定key中字段的数量

    hstrlen key field获取指定key中指定字段的长度

    hmget key field [field2....]获取指定key,所有给定字段的值,如果字段不存在,则返回nil

    hmset key field1 value1[ field2 value2...]同时将多个字段和值设置到指定的key

    hvals key 获取哈希表中所有的值

    5.5 列表List

    List里面的值是可以重复的。

    Blpop key1 [key2] timeout 移除指定key的第一个值,如果多个key,则按key的顺序逐个搜索,直到找到第一个,如果列表没有元素会阻塞列表知道等待超时或发现可弹出元素为止,timeout超时时间,单位是秒

    Brpop key1 [key2] timeout移除指定key的最后一个值,和blpop命令类似

    Brpoplpush source destination timeout 将指定的keysource列表中的第一个弹出,插入到keydestination的最后中。

    Lindex key index 通过索引获取列表中的元素,如果index是负数,那么-1代表最后一个,-2代表倒数第二个 以此类推。

    Llen key 获取列表的长度,也就是元素个数

    Lpop key移除并返回第一个元素

    Lpush key value1 [value2....]将一个或多个值插入到列表头部

    Lpushx key value1 [value2....]将一个值插入到已存在的列表头部,key必须是已存在

    Linsert key before|after pivot value将一个值value插入到值为pivot的前面或后面,如果没有找到pivot返回-1,如果key不存在或者空列表,则返回0

    Lrange key start stop 获取列表指定范围内的元素,包含stop

    Lrem key count value移除指定key中指定count个值为value的元素,当count>0时从表头开始搜索,当count<0时从表尾开始搜索(删除的元素个数就是取绝对值),当count=0的时候,移除表中所有与value相等的值。

    Lset key index value通过索引设置列表元素的值,如果index超出范围,返回一个错误

    Ltrim key start stop 移除索引在startstop区间以外的值,包含stop

    Rpoplpush source destination 移除keysource中的最后一个元素,添加到keydestination的头部

    Rpush key value [value2]在列表的尾部插入一个或多个值

    Rpushx key value为已存在的列表添加一个值,key必须是已存在

    5.6集合Set

    Sadd key member1[member2...]向集合添加一个或多个成员

    Scard key 获取集合的成员数

    Sdiff key1 [key2...]返回差集,也就是key1中有的,后面集合没有的,后面集合可以有多个

    Sdiffstore destination key1[key2....]返回差集,并将差集存储到destination集合中

    Sinter key1[key2...]返回所有集合的交集

    Sinterstore destination key1[key2...]返回交集,并将交集存储在destination

    Sismember key member判断member是否是集合key的成员

    Smembers key返回集合中的所有成员

    Smove sourceKey destinationKey membermember元素从sourceKey集合中移到destinationKey集合中

    Spop key 移除并返回集合中的一个随机元素

    Srandmember key count随机返回count个数的元素,如果count>0则返回不重复的元素,如果count<0则返回可能重复的count的绝对值个元素

    Srem key member1[member2...]删除一个或多个元素,返回成功删除的个数

    Sunion key1 [key2...]返回给定集合的并集

    Sunionstore destionation key1 [key2]返回给定集合的并集,并将结果存储在destionation集合中

    5.5 有序集合Zset

    Zadd key score member [score2 member2]向集合中添加元素,并赋予分值,如果添加了重复的memberscore或者不一样),结果将会返回0,但是后者会覆盖前者的score,其实应该就是一个覆盖的操作。

    Zcard key获取有序集合的成员数量

    Zcount key min max获取集合中指定分数区间的成员数量

    Zincrby key increment member给指定成员的分数加上增量

    Zinterstore destination numkeys key1[key 2...]获取一个或多个集合的交集,存放到destination中,它们的score是各自score的和。

    Zrange key startIndex stopIndex [withscores]返回指定索引区间的成员【分数也返回】

    Zrangebyscore key min max[withscores]返回指定分数区间的成员【分数也返回】

    Zrank key member 返回指定成员的索引

    Zrem key member[member2...] 移除有序集合中的一个或多个成员

    Zremrangebyrank key start stop 移除指定排名的成员【其实就是按索引删除】

    Zremrangebyscore key min max 移除指定分数区间的成员

    Zrevrange key start stop[withscores]返回指定索引区间的成员,分数从高到低

    Zrevrangebyscore key max min[withscores]返回指定分数区间的成员,分数从高到低

    Zrevrank key member 返回指定成员的排名,按分数值从高到低的排序

    Zscore key member 返回指定成员的分数值

    Zunionstore destination numkeys key[key 2....]返回多个有序集合的并集,并存储在destination集合中,numkeys 是指定你有多少个集合

    Zrangebylex

    zremrangebylex

    5.6 快速计算基数HyperLogLog

    就是用来快速统计出一组数据中元素的个数(排除重复的元素)

    Pfadd key element[element2....]添加指定元素的HyperLogLog

    Pfcount key[key2....]返回给定Hyperloglog的基数估算值

    Pfmerge destKey sourcekey[sourcekey2...]合并多个HyperLogLog集合

    5.6发布订阅

    Psubscribe pattern[pattern2...]批量订阅一个或多个符合给定模式的频道,通配符*,比如new*,就是匹配所有以new开头的频道

    Publish channel message发布者在指定频道 发布消息

    Punsubscribe pattern[pattern2....]退订所有符合给定模式的频道

    Subscribe channel[channel2....]订阅多个频道消息

    Unsubscribe channel[channel2...]退订指定频道

    1. Redis高级

    6.1数据备份与恢复

    备份:Save 此命令将在redis安装目录中创建dump.rdb文件,会阻塞客户端

    恢复:将dump.rdb拷贝到redis安装目录,启动服务即可

    Config get dir获取redis的安装目录

    Bgsave 此命令在后台执行备份,通常用这个命令备份

    6.2安全

    Config get requirepass检查是否设置了密码

    Config set requirepass newpass 设置密码

    Auth pass授权登录,pass是之前设置的密码

    6.3客户端连接

    redis2.4中,最大连接数是被直接硬编码在代码里面的,在2.6版本中可以对这个值进行配置,默认还是10000

    Config get maxclients 获得当前配置的最大连接数

    Config set maxclients count设置最大连接数

    Redis-server --maxclients count 在启动服务的时候设置最大连接数

      

      

  • 相关阅读:
    SpannaleString总结
    【未完成】bug记录2013427>import工程时出现Build path contains duplicate entry:'src' for project 'XXX'
    【未完成】给eclipse项目改名
    android创建和删除桌面快捷方式
    bug记录2013426(2)>Select at least one project错误
    hosts配置
    获取当前应用的版本号及android系统版本号及手机型号
    转载:如何将offcie 2003文档(.doc、.xls、.ppt)转换成mht文档
    转载:.NET2.0 验证控件常用的正则表达式
    转载: RESTORE DATABASE命令还原SQLServer 2005 数据库
  • 原文地址:https://www.cnblogs.com/LJP-JumpAndFly/p/12105723.html
Copyright © 2020-2023  润新知