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    
原文地址:https://www.cnblogs.com/siqi/p/3622163.html