zoukankan      html  css  js  c++  java
  • Redis-基础类型与命令

    一、基础命令

    select 2  选择2号数据库,redis默认有16个数据库,默认进入0号数据库
    
    flushdb 删除当前数据库数据
    
    flushall 删除所有数据库数据
    
    keys * 查看当前库所以的key
    
    exists key 是否存在key,返回1或0
    
    move key 新的数据库 移动key到新数据库,一般不会用,如move key 3
    
    expire key seconds设置过期时间,num单位是秒,如10,就是十秒后过期
    
    ttl key 查看这个key还有多久过期,若该key未设置过期时间返回-1,当用户过期后返回-2
    
    type key 查看key是什么类型
    
    shutdown  关闭redis服务端
    

    二、string(字符串)

    默认情况下我们set key value就是字符类型

    append key value ,value用引号包裹,会在原来的v后面追加值,若key不存在,就新增一个key,此时相当于set key value
    
    strlen key 获取这个key对应v的长度
    

    关于文章浏览量:我们不能每次都去数据库里加一或减一,可以在redis里做

    set views 0 # 设置一个key作为文章的浏览量
    incr views 每次对views加一
    INCRBY views 10 每次对views加10,相当于设置步长
    decr views 每次对views减一
    DECRBY views 5 每次对views减5
    

    切片:都是闭区间

    set key1 hello,world
    GETRANGE key1 0 3 截取key1第0-3的字符,是闭区间 "hell"
    GETRANGE key1 0 -1 截取整个字符串
    getrange key1 -1 -2 不会报错,但是返回空字符创
    getrange key1 -2 -1 倒数第二个字符开始切片到最后,返回ld
    

    替换:

    set key1 abcdefgh
    # SETRANGE key 偏移量 value
    SETRANGE key1 1 xx
    axxdefgh # 表示从索引1开始向后替换,而不是把索引1替换成xx,若超过了原来的长度,自动扩容
    

    设置过期时间:setex

    # setex(set with expire) # 在创key的时候就设置过期时间
    setex key1 30 "hello"
    
    # setnx(set if not exist) # 不存在再设置,在分布式锁中常用
    setnx key2 "redis"  # 如果key2这个键不存在,就可以创建这个key。返回1
    setnx key2 "mysql"  # 此时key2已经存在,就创建失败返回0而不是覆盖
    

    批量设置值:mset

    mset k1 v1 k2 v2 k3 v3 # 批量设置,设置三个键值对
    
    mget k1 k2 k3  # 批量获取值
    
    msetnx k1 v1 k4 v4 # msetnx是一个原子性操作,因为k1已经有了,所以无法创建,所以k4也不能设置
    get k4 此时会返回空
    

    先获取再操作,getset

    先get再set,可用来做更新操作,如果值不存在就返回空,然后把后面的值设置进去,如果有值就返回值
    getset db redis  # 此时db没有值,返回空
    (nil)
    get db  # 设置完了值,我们可以正常get
    "redis"
    getset db mysql  # db现在有值是redis,返回redis,然后设置新的value是mysql
    "redis"
    get db  # 设置了新的值我们get的值也是新的值
    "mysql"
    

    三、list(列表类型)

    在redis里,可以把list设置成队列,栈,阻塞队列等,所有的list命令都是l开头。

    他实际是一个链表。

    如果key不存在,就创建新的链表,如果key存在,就新增内容

    如果移除了所有的值,就成了空链表,也就不存在了

    因为是链表,所以在两边插入或者改动值的效率最高,对中间元素的效率较低

    # lpush为从左向右加值,rpush为从右向左加值
    LPUSH list one  # 以list为key,one为值进行存值
    LPUSH list two
    LPUSH list three
    
    # lrange 相当于切片
    LRANGE list 0 -1  # 返回three,two,one,也可以用来查看当前这个列表内的元素
    LRANGE list 0 1  # 返回three,two
    
    # Lpop 从左边开始删除值,RPOP从右边开始删除值
    Lpop list
    Rpop list
    
    lindex list 2  # 根据索引取值
    
    Llen list # 返回长度
    
    lrem list 2 one  # 在list里,移除one这个值,从上往下移除两个,也可以只移除第一个,就写1,可以用于取消关注等
    
    ltrim list 1 2 # 截取,剩下的list就是我们截取的,写1,-1就是全部截取
    
    rpoppush list1 list2  # 把list1的右边第一个值移动到list2里
    
    lset list 0 hello  # 相当于替换操作
    
    linsert list before hello other # 插入,可指定在前面before或者后面after,在hello前面插入other
    

    四、set(集合类型)

    set中的值不能重复,基本数据结构,python中也有。集合常常用于比如微博,A用户所有关注的人放在一个集合里,A的粉丝都放在另一个集合。然后就可以很容易的找到共同关注,共同好友,共同爱好,好友推荐等等。

    sadd set1 'hello'
    sadd set1 'hello1'
    sadd set1 'hello2'
    
    smembers set1 # 返回集合里的元素
    
    sismenber set1 hello # 看看hello在不在set1里面。返回1,则存在,返回0,就不存在
    
    scard set1 # 获取集合中元素个数,注意和smembers的区别
    
    srem set1 hello # 移除某个元素
    
    srandmember set1 # 随机获取集合中的一个元素
    srandmember set1 2 # 随机获取集合中的两个元素
    
    spop set1 # 随机移除一个元素,比如抽奖的时候,可以随机移除一个元素,这个人就是获奖的人
    
    smove set1 set2 hello # 把hello从set1移动到set2
    
    # 共同关注,就是并集,在python中,可以用set1 & set2
    sdiff set1 set2 # 差集
    sinter set1 set2 # 交集
    sunion set1 set2 # 并集
    

    五、hash(哈希类型,散列表)

    hset hash1 f1 yang # 存值
    hget hash1 f1 # 取值
    
    hmset hash1 f1 yang f2 egon # 批量存值
    hmget hash1 f1 f2  # 批量取值
    
    hgetall hash1  # 获取所有值
    
    hdel hash1 f1  # 指定删除key,可以同时删除多个
    
    hlen hash1  # 获取长度
    
    hexists hash1 f1 # 判断指定字段是否存在
    
    hkeys hash1 	# 获取hash的所有key
    hvals hash1	    # 获取hash的所有values
    
    HINCRBY hash1 num 2  # 步长为2递增
    HINCRBY hash1 num -2 # 相当与hdecrby
    
    hsetnx 和str类型一样
    

    存变更的数据,尤其是变动的数据,比如user有name和age。hash更适合对象的存储,str更适合字符串的存储。

    hset user:1 name yang age:18
    hget user:1 name
    

    六、Zset(有序集合)

    有序集合,在set基础上增加了一个值

    zadd zset1 1 one 		  # 存值
    zadd zset1 2 two 3 three  # 批量存值
    
    zrange zset1 0 -1  # 查看zset1里的所有元素
    
    zadd salary 2500 yang 5000 egon 8000 lqz
    zrangebycore salary -inf +inf # 从最小值到最大值排序
    zrangebycore salary -inf +inf withscores
    zrangebycore salary -inf 5000 
    
    zrevrange salary 0 -1 # 从最大值到最小值排序
    
    zrem salary yang
    zcard zset1  # 获取有序集合中的个数
    
    zcount zset1 1 3 # 获取指定区间内的元素个数,闭区间且开始索引位1
    

    用处:

    可以排序班级成绩,公司的工资,阅读排行榜等等,处理一些不是很重要的排序。

    或者设计一个信息的通知,普通信息 1 重要信息 2 紧急信息 3

  • 相关阅读:
    ajax_注册
    mysql 二
    mysql基础
    django数据库批量创建
    私有属性
    mysql操作
    @property @classmethod @staticmethod
    python中的__new__方法
    员工信息表-装逼版
    三级菜单
  • 原文地址:https://www.cnblogs.com/chiyun/p/14073880.html
Copyright © 2011-2022 走看看