zoukankan      html  css  js  c++  java
  • Redis

    No1:

    MongoDB是文档存储,一般以json的格式存储。

    Redis是key-value存储。

    No2:

    Redis键的类型永远是字符串,值可以是字符串、哈希hash、列表list、集合set、有序集合zset,数据操作命令可以查redis中文网站

    No3:

    redis官网是不支持win系统的,win系统版本要去github上下载https://github.com/MSOpenTech/redis/releases

    下载后解压,配置环境变量,配置文件在redis.windows.conf

    redis-server    运行redis服务器
    redis-server --service-start    启动redis服务,一般启动一次就可以了
    redis-cli    进入命令行模式

    No4:

    【string】

    • 最大能存储512MB数据
    • string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等
    set key value    --设置键值
    SETEX key seconds value    --设置键值及过期时间,以秒为单位
    MSET key value [key value ...]    --设置多个键值
    
    GET key    --根据键获取值,如果不存在此键则返回nil
    MGET key [key ...]    --根据多个键获取多个值
    
    APPEND key value       --追加值
    STRLEN key    --获取值长度

    No5:

    【键命令】

    KEYS pattern    --查找键,参数支持正则
    EXISTS key [key ...]    --判断键是否存在,如果存在返回1,不存在返回0
    TYPE key    --查看键对应的value的类型
    DEL key [key ...]    --删除键及对应的值
    EXPIRE key seconds    --设置过期时间,以秒为单位
        创建时没有设置过期时间则一直存在,直到使用使用DEL移除            
    TTL key    --查看有效时间,以秒为单位

    No6:

    【hash】

    • hash用于存储对象,对象的格式为键值对
    HSET key field value    --设置单个属性
    HMSET key field value [field value ...]    --设置多个属性
    HGET key field    --获取一个属性的值
    HMGET key field [field ...]    --获取多个属性的值
    HGETALL key    --获取所有属性和值
    HKEYS key    --获取所有的属性
    HLEN key    --返回包含属性的个数
    HVALS key    --获取所有值
    HEXISTS key field    --判断属性是否存在
    HDEL key field [field ...]    --删除属性及值
    HSTRLEN key field    --返回值的字符串长度

    No7:

    【list】

    • 列表的元素类型为string
    • 按照插入顺序排序
    • 在列表的头部或者尾部添加元素
    LPUSH key value [value ...]    --在头部插入数据
    RPUSH key value [value ...]    --在尾部插入数据
    LINSERT key BEFORE|AFTER pivot value    --在一个元素的前|后插入新元素
    LSET key index value    --设置指定索引的元素值
            索引是基于0的下标
            索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
    
    LPOP key    --移除并且返回 key 对应的 list 的第一个元素
    RPOP key    --移除并返回存于 key 的 list 的最后一个元素
    LRANGE key start stop    --返回存储在 key 的列表里指定范围内的元素
            start 和 end 偏移量都是基于0的下标
            偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
    
    LTRIM key start stop    --裁剪列表,改为原集合的一个子集
            start 和 end 偏移量都是基于0的下标
            偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
    LLEN key       --返回存储在 key 里的list的长度
    LINDEX key index    --返回列表里索引对应的元素

    No8:

    【set】

    • 无序集合
    • 元素为string类型
    • 元素具有唯一性,不重复
    SADD key member [member ...]    --添加元素
    SMEMBERS key    --返回key集合所有的元素
    SCARD key    --返回集合元素个数
    
    SINTER key [key ...]    --求多个集合的交集
    SDIFF key [key ...]    --求某集合与其它集合的差集
    SUNION key [key ...]    --求多个集合的合集
    SISMEMBER key member    --判断元素是否在集合中

    No9:

    【zset】

    • sorted set,有序集合
    • 元素为string类型
    • 元素具有唯一性,不重复
    • 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
    • 元素的score可以相同
    ZADD key score member [score member ...]    --添加
    ZRANGE key start stop    --返回指定范围内的元素
    ZCARD key    --返回元素个数
    ZCOUNT key min max    --返回有序集key中,score值在min和max之间的成员
    ZSCORE key member    --返回有序集key中,成员member的score值

    No10:

    【发布订阅】

    • 推送消息的格式包含三部分
    • part1:消息类型,包含三种类型
      • subscribe,表示订阅成功
      • unsubscribe,表示取消订阅成功
      • message,表示其它终端发布消息
    • 如果第一部分的值为subscribe,则第二部分是频道,第三部分是现在订阅的频道的数量
    • 如果第一部分的值为unsubscribe,则第二部分是频道,第三部分是现在订阅的频道的数量,如果为0则表示当前没有订阅任何频道,当在Pub/Sub以外状态,客户端可以发出任何redis命令
    • 如果第一部分的值为message,则第二部分是来源频道的名称,第三部分是消息的内容
    SUBSCRIBE 频道名称 [频道名称 ...]    --订阅
    UNSUBSCRIBE 频道名称 [频道名称 ...]    --取消订阅,如果不写参数,表示取消所有订阅
    PUBLISH 频道 消息    --发布

    No11:

    【主从配置】

    一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
    比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
    
    --设置主服务器的配置
    bind 192.168.1.10    
    --设置从服务器的配置
    注意:在slaveof后面写主机ip,再写端口,而且端口必须写
    bind 192.168.1.11
    slaveof 192.168.1.10 6379    

    No12:

    【与python交互】

    import redis
    try:
        r=redis.StrictRedis(host='localhost',port=6379)
    except Exception,e:
        print e.message
    
    -----1
    r.set('name','hello')
    r.get('name')
    
    ----2
    pipe = r.pipeline()
    pipe.set('name', 'world')
    pipe.get('name')
    pipe.execute()
    ----封装
    import redis
    class RedisHelper():
        def __init__(self,host='localhost',port=6379):
            self.__redis = redis.StrictRedis(host, port)
        def get(self,key):
            if self.__redis.exists(key):
                return self.__redis.get(key)
            else:
                return ""
        def set(self,key,value):
            self.__redis.set(key,value)

    No13:

    【用户登录模块】

    #encoding=utf-8
    from t2 import RedisHelper
    from t3 import MysqlHelper
    import hashlib
    
    name=raw_input("请输入用户名:")
    pwd=raw_input("请输入密码:")
    
    sha1=hashlib.sha1()
    sha1.update(pwd)
    pwd1=sha1.hexdigest()
    
    try:
        redis=RedisHelper()
        if redis.get('uname')==name:
            print 'ok'
        else:
            mysql=MysqlHelper('localhost',3306,'test1','root','mysql')
            upwd=mysql.get_one('select upwd from userinfos where uname=%s',[name])
            if upwd==None:
                print '用户名错误'
            elif upwd[0]==pwd1:
                redis.set('uname', name)
                print '登录成功'
            else:
                print "密码错误"
    except Exception,e:
        print e.message
  • 相关阅读:
    【计算几何】多边形交集
    【计算几何】点在多边形内部
    【计算几何】线段相交
    【计算几何】多边形点集排序
    【JavaScript学习】JavaScript对象创建
    【CUDA学习】内核程序调试
    【CUDA学习】共享存储器
    【CUDA学习】全局存储器
    Charles是Mac的Fiddler抓包工具
    Charles是mac的iddler抓包工具
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/9990876.html
Copyright © 2011-2022 走看看