NoSQL下

原创
2018/05/06 15:59
阅读数 7
    • set操作

      • Set是不重复的list
      • sadd(name,values)
      • r.sadd("set_name","aa","bb")
      • smembers(name)
        1. 获取name对应的集合的所有成员
      • scard(name)
        1. 获取name对应的集合中的元素个数
      • sismember(name,value)
        1. 检查value是否是name对应的集合内的元素
      • spop(name)
        1. 从集合的右侧移除一个元素 ,并将其返回
      • srem(name, value)
        1. 删除集合中的某个元素r.srem("set_name", "aa")
      • sunion(keys,*args)
        1. 获取多个name对应的集合的并集r.sunion("set_name","set_name1","set_name2")
      • sinter(set1,set2) 交集
      • 实例
        >>> import redis
        >>> r = redis.Redis(host="10.148.60.61",port=6379,db=0)
        >>> r.sadd("set1",1,2,3,4,5) # 增加一个集合
        5
        >>> r.smembers("set1")  # 显示集合所有元素
        {b'3', b'2', b'1', b'4', b'5'}
        >>> r.scard("set1")  # 显示集合元素的个数
        5
        >>> r.sismember("set1",6)  # 判断元素6是不是在集合set1内,返回True或False
        False
        >>> r.sismember("set1",5)
        True
        >>> r.spop("set1")  # 从右边删除第一个元素
        b'5'
        >>> r.srem("set1",1)  # 删除指定元素
        1
        >>> r.sadd("set2",4,5,6,7,2) # 创建集合set2
        5
        >>> r.sunion("set1","set2")  # 显示set1和set2的合集
        {b'3', b'2', b'6', b'7', b'4', b'5'}
        >>> r.sinter("set1","set2")  # 显示set1和set2的交集
        {b'2', b'4'}
    • hash操作

      Redis在内存中存储hash类型是以name对应一个字典形式存储的

      • hset(name,key,value)
        1. name对应的hash中设置一个键值对(不存在,则创建;否则,修改)
        2. key对应的hash中的key
        3. value对应的hash中的value
      • hget(name,key)
        1. 在name对应的hash中获取根据key获取value
      • hmset(name,mapping)
        1. 在name对应的hash中批量设置键值对
        2. name:redis的name
        3. mapping:字典,如{'k1':'v1','k2','v2'}
      • hmget(name,keys,*args)
        1. 在name对应的hash中获取多个key的值
        2. name:redis对应的name
        3. keys:要获取key的集合,如:['k1','k2','k3']
        4. *args:要获取的key,如:k1,k2,k3
        5. print(r.hmget('test','k1','k2')) #获取多个值
      • hgetall(name)
        1. 获取name对应hash的所有键值
      • hlen(name)
        1. 获取name对应的hash中键值的个数
      • hkeys(name) 1.获取name对应的hash中所有的key的值
      • hvals(name)
        1. 获取name对应的hash中所有的value的值
      • hexists(name,key)
        1. 检查name对应的hash是否存在当 前传入的key
      • hdel(name,*keys)
        1. 将name对应的hash中指定key的键值对删除
      • 实例
      >>> r.hset("testHash","key1","value1")
      1
      >>> r.hget("testHash","key1")
      b'value1'
      >>> r.hmset("hash1",{"k1":"v1","k2":"v2","k3":"v3"})
      True
      >>> r.hmget("hash1","k1","k2")
      [b'v1', b'v2']
      >>> r.hgetall("hash1")
      {b'k1': b'v1', b'k2': b'v2', b'k3': b'v3'}
      >>> r.hlen("hash1")
      3
      >>> r.hkeys("hash1")
      [b'k1', b'k2', b'k3']
      >>> r.hvals("hash1")
      [b'v1', b'v2', b'v3']
      >>> r.hexists("hash1","v3")
      False
      >>> r.hexists("hash1","k3")
      True
      >>> r.hdel("hash1","k3")
      1
      >>> r.hexists("hash1","k3")
      False
    • 其它操作

      • delete(*names)
        1. 根据name删除redis中的任意数据类型
      • exists(name)
        1. 检测redis的name是否存在
      • keys(pattern='*')
        1. 根据*?等通配符匹配获取redis的name
      • expire(name ,time)
        1. 为某个name设置过期时间
      • rename(src, dst)
        1. 重命名
      • move(name, db)
        1. 将redis的某个值移动到指定的db下
      • type(name)
        1. 获取name对应值的类型
      • flushall删除所有的key(在redis服务端使用)

python操作memcached

  • 服务端安装memcached
    • cd /usr/local/src
    • wget http://memcached.org/latest
    • tar -zxvf memcached-1.x.x.tar.gz
    • cd memcached-1.x.x
    • ./configure && make && make test && make install
    • 启动memcachememcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /export/servers/memcache/logs/memcache.pid
    • 参数说明-p指定端口号默认11211),-m指定最大使用内存大小(默认64MB),-t线程数(默认4),-l指定IP地址,默认本季,-d以后台守护进程方式启动,-c最大同时连接数,默认是1024,-P指定memcached的pid文件,-h打印帮助信息
  • 客户端pip install python-memcached
  • 优势
    • 天生支持集群:

      • python-memcachd模块原生支持集群操作,其原理是在内存维护一个主机列表,且集群中主机的权重值和主机在列表中重复出现的次数成正比。

      • 主机和权重

        主机 权重
        1.1.1.1 1
        1.1.1.2 2
        1.1.1.3 3
      • 那么在内存中主机列表为:host_list=['1.1.1.1','1.1.1.2','1.1.1.2','1.1.1.3',]

      • 例子:
        python操作memcache集群
        mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2), ('1.1.1.3:12000', 1)], debug=True)
        mc.set('k1', 'v1')

    • Memcache常用操作:

      • 存储命令:set/add/replace/append/prepend/cas
      • 获取命令:get/gets
      • 其他命令:delete/stats..
      • mc.set("k1","v1") # 设定键值对k1=v1
      • set_multi:设置 多个键值对,如果key不存在,则创建 ,如果key存在,则修改
      • mc.get("k1") # 获得k1的值
      • add方法 mc.add("k2","v2") # 增加一个键值对
      • set方法和add方法的区别:
        set = add + replace
      • replace方法,修改某个key的值,如果key不存在,则异常。
      • delete:在Memcached中删除指定的一个键值对;
      • delete_multi:在Memcached中删除指定的多个键值对。
      • get : 获取一个键值对;
      • get_multi:获取多个键值对。
      • append:修改指定key的值,在该值后面 追加内容;
      • prepend:修改指定key的值,在该值前面插入内容。
    • 实例操作

      import memcache
      mc = memcache.Client(['192.168.42.133:12000'],debug=True)
      mc.add("k1","v1")
      print(mc.get('k1'))
      mc.set("k1","v0")  #  如果k1存在就修改其值,不存在就创建k1
      print(mc.get('k1'))
      mc.replace("k1","v1")  # 修改k1的值,如果不存在就抛出异常错误
      print(mc.get('k1'))
      dict1 = {"a":1,"b":2,"c":3}
      mc.set_multi(dict1)  # set_multi的参数是一个字典,可以提前设定好
      print(mc.get_multi(["a","b"]))  # get_multi的参数是一个list
      mc.append("a","2")  # a的值本来是1,如果append了一个2后,就成了12
      print(mc.get("a"))
      mc.prepend("a","3")  # 在a的值前面插入3
      print(mc.get("a"))

      输出结果:

      v1
      v0
      v1
      {'a': 1, 'b': 2}
      12
      312
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部