zoukankan      html  css  js  c++  java
  • redis 学习

    没有固定表结构
    
        nosql的特点:
            非关系型
            分布式(做主从分离很简单)
            开源的
            水平可扩展
        
            处理超大量数据
            性能高
            
    nosql适用场景    
        1、对数据高并发读写
        2、海量数据高效率存储和访问
        3、高可扩展和高可用
        
        
    redis也支持事务,但过于简单
        键值式存储,被称为数据结构服务器
        
        支持:字符串 strings
              哈希 hash
              链表 list 模拟栈和队列
              集合 set
              有序集合 sorted set
              
              这几种结构都支持 push/pop/add/remove取交集并集等
              
              各种排序
              
              可以周期性把数据写入磁盘或把修改操作写入追加的的记录文件(类似binlog)
              
    php 先从redis中读取,出错则从mysql中读取, redis和mysql中的数据保持同步
        
    
    string类型:    
    
        set name value #会被覆盖 永久有效
        setnx name value #如果存在返回0,不会被覆盖,否则返回1, nx 是not exist的意思
        setex name ttl value  #设置有效期,可以覆盖重复的key
        
        set name song@126.com
        setrange name 6 gmail.com #从第六个字符开始替换(如果不如原字符串长,会保留原来的剩下的字符串部分) 返回值的总长度
        get name #song@gmail.com
        
        #删除某个key
        del key
        
        #批量设置 如果ok都成功,如果0则都不成功
        mset key1 value1 key2 value2
        
        #批量设置,不覆盖已经存在的key,如果ok都成功,如果0则都不成功
        #msetnx 
        
        #设置一个值,并返回key的旧值
        getset key value
        
        #获取指定key的指定位置字符
        getrange key start(从0开始) end 
        
        #批量获取
        mget key1 key2 key3
        
        #递增,并返回新值 key不存在则设置
        incr key
        
        #增加指定值 key不存在则设置
        incrby key  num(可以是负数)
        
        decr 同上,递减
        decrby 同上,递减指定值
        
        #给指定key的字符串追加value,不存在则创建
        append key value
        
        #返回值的长度
        strlen key
        
        
    hash:是一个string类型的field和value的映射表 
    
        hset myhash key value #myhash可以看做一个表
        hget 
        hsetnx #同上
        hmset
        hincrby
        
        #检测某个字段是否存在1
        hexists myhash age
        
        #返回key的数量
        hlen myhash user:1
        
        #删除某个key
        hdel
        
        #返回哈希表所有的字段
        hkeys myhash
        
        #返回哈希表所有的值
        
        #获取某个哈希中所有的key、val
        hgetall
        
    list:链表 key 理解为链表的名字 每个元素都是string类型的 双向链表    可以作为栈和队列
        
        #从头部压入一个元素 返回list中的元素个数
        lpush
        
        #从第一个取到倒数第一个
        lrange 0 -1
        
        #从尾部压入一个元素
        rpush
        
        #linsert 在特定位置的前或者后添加字符串
        linsert mylist before "one" two #在one前面(上面为链表头,下面为链表尾)添加two元素
        
        #替换指定下标的值
        lset index value #从0开始数
        
        #从key对应list中删除n个和value相同的值(n<0从尾部,n=0全部删除)
        lrem mylist n value
        
        #保留指定key范围内的数据
        ltrim mylist 1 -1
        
        #从list头部删除一个元素
        lpop
        
        #从尾弹出
        rpop
        
        #从第一个list的尾部移除元素并添加到第二个list的头部
        rpoplpush mylist1 mylist2
        
        #返回index位置的元素的值
        lindex mylist index
        
        #返回链表的元素个数
        llen
        
        #删除指定下标 index 的值,没有原生的方法
        lset mylist index "del"
       lrem mylist 0 "del"
        
    set:集合string类型的无序集合 set是通过hash table实现的
        添加、删除、修改的复杂度都是O(1),可以取交集、并集、差集
        
        #添加一个元素
        sadd myset value
        
        #列出所有元素
        smembers myset
        
        #删除一个元素 
        srem myset value
        
        #随机弹出一个元素
        spop myset
        
        #两个集合的差集
        sdiff myset1 myset2
        
        #将myset1、myset2的差集存到myset3里
        sdiffstore myset1 myset2 myset3
        
        #取交集
        sinter 
        sinterstore 同上
        
        #并集
        sunion
        sunionstore 
        
        #将一个集合中的元素减去后放到另一集合中
        smove myset1 myset2 value #把value从myset1 中移除,并添加到myset2中
        
        #统计集合的元素个数
        scard myset
        
        #测试某个元素是否属于这个集合
        sismember myset value
        
        #随机返回一个元素,不删除元素
        srandmember myset
        
    sorted sets :有序集合 set的一个升级版本在set的基础上添加了一个顺序属性
    
        #添加一个元素
        zadd myset index value #需要指定index顺序值
        
        #显示数据
        zrange myset 0 -1 withscores
        
        #删除
        zrem myzset value
        
        #对顺序号进行增加,返回新的顺序号
        zincrby myzset 1 one
        
        #显示值的索引值,注意并不是score值,先按score进行排序
        zrank myzset value
        
        #先按score从大到小排序
        zrevrank 同上
        
        #以score值来取值
        zrangebyscroe myzset from to
        
        #返回给定score区间的数量
        zcounts myzset from to 
        
        #所有元素个数
        zcard myzset
        
        #按下标进行删除
        zrembyrank
        
        #按score进行删除
        zrembyscore
        
    #显示所有的key    
    keys *     
    
    #检测某个key是否存在
    exists key
    
    #删除一个键
    del key
    
    #设置某个键的过期时间 -1代表已经过期
    expire key ttl
    
    数据库编码 0-15 ,默认进入0数据库
    select 0
    
    #将当前数据库中的key,移动到其他库中
    move key 1[数据库编号]
    
    #让某个key不在过期
    persist  key
    
    #随机返回key中的一个key
    randomkey
    
    #重命名一个key
    rename old new
    
    #返回key的类型
    type key
    
    #测试连接是否联通
    ping 
    
    #输出一些信息
    echo 
    
    #当前数据库的key的数据
    dbsize
    
    #redis服务器的一些信息
    info
    
    #获取配置信息
    config get *
    config get timeout    #具体的条目
    
    #清空当前数据库
    flushdb
    
    #删除所有数据
    flushall
        
    #设置密码
    requirepass password
    
    #验证密码
    登陆成功后 auth password
    redis-cli -a password    
    
    
    #开启主从复制 只需在slave配置文件中加入
    slaveof 192.168.0.1 6379 #指定master的ip、端口
    masterauth lamp #指定主机密码
    
    #事务
    multi
    .....  discard #取消队列中的命令
    exec
    
    #乐观锁
    类似版本控制
    
    
    #数据持久化
    1、snapshotting(快照) 也是默认方式 #讲数据存到文件里
        save 900 10 #900秒内如果有10个key被更改则保存快照 ,可以设置多个
        如果中间宕机,会丢失最后一个的快照修改,且同步有延时
        
    2、append-only-file (缩写aof)的方式 #将写改操作放到文件里,当redis重启时会通过执行文件中的内容重建整个数据库内容
        由于os会在内核中缓存write的修改,所以有可能也不是立即写到磁盘上,这样还是会丢失数据
        
        appendonly yes #使用aof持久化方式
        appendfsync always #收到命令就立即写入磁盘,最慢,但是保证完全的持久化
        appendfsync everysec #每秒写入一次 在性能和持久化方面做了很好的折中
        appendfsync no #完全依赖os,性能最好,但持久化没保证
    
    #订阅、发布
    
    #订阅消息
    subscribe tv1 tv2
    
    #发布消息
    publish tv1 "content"
    
    更详细的命令请搜索 redis chm    
  • 相关阅读:
    Jmeter之Web测试(一)
    Appium 提高脚本复用、可配置性
    Appium 解决中文输入问题
    Appium Python Driver Api
    Appium Android 屏幕滑动
    Android logcat使用
    android adb:电池与电量
    Loadrunner测试json接口
    python输出1到100之和的几种方法
    python 随机生成用户名、密码、手机号码
  • 原文地址:https://www.cnblogs.com/siqi/p/3622163.html
Copyright © 2011-2022 走看看