美文网首页
Redis学习笔记(二)

Redis学习笔记(二)

作者: dev_winner | 来源:发表于2019-12-22 17:12 被阅读0次

    redis 常用命令

    • del key:删除key。
    • dump key:序列化一个key,返回被序列化的值。
    • exists key:检查key是否存在。
    • expire key seconds:设置key的过期时间(以计)。
    • pexpire key milliseconds:设置key的过期时间(以毫秒计)。
    • ttl key:以为单位,返回给定key的剩余生存时间(TTL:time to live) (返回值:-1:永久;-2:该key不存在;其他非负整数:该key的剩余生存时间)。
    • pttl key:以毫秒为单位,返回给定key的剩余生存时间。
    • persist key:移除key的过期时间,key将永久保存。
    • keys pattern:查找所有符合给定模式(pattern)的key。 通配符(pattern):*代表所有;?表示代表一个字符。
    • randomkey:随机返回一个key。
    • rename key newkey:修改key的名称。
    • move key db:移动key至指定数据库中。
    • select db:切换到某个数据库,db为数字,取值为0~15
    • type key:返回key对应的值的数据类型。

    设置key过期时间的应用场景

    1、限时的优惠活动信息;
    2、网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜);
    3、手机验证码;
    4、限制网站访客访问频率(例如:1分钟最多访问10次)。

    key的命名建议

    1、key不要太长,尽量不要超过1024字节。因为这不仅消耗内存,也会降低查找的效率;
    2、key不要太短,太短可读性会降低;
    3、在一个项目中,key最好使用统一的命名模式,间隔用冒号隔开,如user:123:password;
    4、key的名称区分大小写

    redis数据类型

    字符串-string

    • string是redis最基本的,且是二进制安全的数据类型。一个key对应一个value。一个key最大能存储512MB。string可以包含任何数据,比如jpg图片或者序列化的对象 。
    • 二进制安全:指在传输数据时,保证二进制数据的信息安全,即不被篡改、破译等,若被攻击,则能够及时地检测出来。 特点:编码、解码发生在客户端完成,执行效率高;不需要频繁地编解码,不会出现乱码问题。
    • set key value:命令不区分大小写,但是key区分大小写。
    • setnx key value:当key不存在时设置key的值。(set if not exists)(解决分布式锁的方案之一)。
    • mset key value [key value ...]:同时设置一个或多个键值对。
    • get key:获取指定key的值。若key不存在,则返回nil。若key储存的值不是字符串类型,则返回一个错误。
    • getrange key start end:获取指定key对应的值的子字符串,左闭右闭区间。若key不存在,则返回空字符串""
    • mget key1 [key2 ...]:获取所有给定key的值。
    • getset key value:设定key的值,并返回key的旧值。当key不存在,返回nil。
    • strlen key:返回key对应的值的字符串长度。
    • incr key:将key对应的值+1。若不存在key,则key中的值话先被初始化为0再加1。若key对应的值不是数字类型,则将报错:(error) ERR value is not an integer or out of range
    • incrby key x:将key对应的值+x。(注意:key对应的值必须是数字类型)
    • decr key:将key对应的值-1。(注意:key对应的值必须是数字类型)
    • decrby key x:将key对应的值-x。(注意:key对应的值必须是数字类型)
    • append key value:将字符串value追加至key对应的值的末尾,若key不存在,则设置一个新的键值对。

    string类型的应用场景

    1、string通常用于保存单个字符串或JSON字符串数据;
    2、因为string是二进制安全的,所以完全可以把一个图片文件的内容作为字符串来保存;
    3、计数器(常规K-V的缓存应用。常规计数:微博数,粉丝数)

    哈希-hash

    • redis hash是一个string类型的field和value的映射表。hash特别适用于存储对象。每个hash可以存储 2^{32}-1 个键值对,可将其看成一个map容器。相比于JSON,hash占用很少的内存空间。
    • hset key field value:为指定的key,设定field-value。
    • hmset key field1 value1 [field2 value2 ...]:将多个field-value(域-值)对设置到key的哈希值当中。
    • hget key field:获取key的哈希值中某个field域对应的值。
    • hmget key field1 [field2 ...]:获取key的哈希值中所有给定field域对应的值。
    • hgetall key:返回key的哈希值中所有field域和value值。
    • hkeys key:获取key的哈希值中所有field域的名称。
    • hlen key:获取key的哈希值中field域的个数。
    • hdel key field1 [field2 ...]:删除key的哈希值中所有给定的field-value(域-值)对。
    • hsetnx key field value:只有key的哈希值中field域不存在时,才添加key的哈希值中一对field-value。
    • hincrby key field increment:将key的哈希值中指定field对应的整数值加上增量increment。
    • hincrbyfloat key field increment:将key的哈希值中指定field对应的浮点数值加上增量increment。
    • hexists key field:查看key的哈希值中是否存在某个field域。

    hash类型的应用场景

    存储一个用户信息对象的数据

    列表-list

    • 类似java集合中的双向循环链表LinkedList
    • lpush key value1 [value2 ...]:将一个或多个值依次插入到列表key的左侧。
    • rpush key value1 [value2 ...]:将一个或多个值依次插入到列表key的右侧。
    • lpushx key value1 [value2 ...]:将一个或多个值插入到已存在的列表左侧。若列表key不存在,则操作无效。
    • rpushx key value1 [value2 ...]:将一个或多个值插入到已存在的列表右侧。若列表key不存在,则操作无效。
    • llen key:获取列表key的长度。
    • lindex key index:获取列表key中指定索引的元素。
    • lrange key start stop:获取列表中指定范围的元素,左闭右闭区间。其中,0表示列表中第一个元素,1表示列表中第二个元素,以此类推。也可以使用负数下标,-1 表示列表中最后一个元素,-2表示列表中倒数第二个元素,以此类推。
    • lpop key:移除并返回列表左侧的第一个元素。
    • prop key:移除并返回列表右侧的第一个元素。
    • blpop key1 [key2 ...] timeout:移除并返回列表中第一个元素,若列表中没有元素,则会阻塞列表到等待超时或发现可弹出元素为止。
    • brpop key1 [key2 ...] timeout:移除并返回列表中最后一个元素,若列表中没有元素,则会阻塞列表到等待超时或发现可弹出元素为止。
    • ltrim key start stop:对列表进行修剪(trim),让列表只保留指定区间的元素,不在指定区间的元素就会被删除。
    • lset key index value:修改列表中指定索引的值。
    • linsert key before|after pivot value:在列表key中某个元素pivot的前面或后面插入一个元素。
    • rpoplpush list1 list2:移除列表list1中最后一个元素,将该元素添加到列表list2的左侧并返回此元素。

    list类型的应用场景

    1、对数据量大的集合进行数据删减、列表显示、留言评价、分页、热点新闻(Top5)等;利用lrange还可以很方便地实现分页功能。
    2、任务队列:list列表通常用来实现一个消息队列,其可以确保任务被执行的先后顺序,不必像MySQL那样通过order by关键字来排序。常用案例:订单系统的下单流程、用户系统登录注册功能等。

    无序不重复集合-set

    • sadd key value1[value2 ...]:向集合中添加一个或多个元素。
    • scard key:返回集合中元素的个数。
    • smembers key:返回集合中所有元素。
    • sismember key member:判断集合key中是否包含一个member元素。
    • srandmember key [count]:返回集合key中一个或多个随机元素。
    • srem key member1 [member2 ...]:移除集合key中一个或多个元素。
    • spop key [count]:随机移除并返回集合key中的一个或多个元素。
    • smove source destination member:将指定的member元素从source集合移动到destination集合。
    • sdiff key1 [key2 ...]:返回第一个集合key1与其他集合的差集。
    • sinter key1 [key2 ...]:返回给定集合的交集。
    • sunion key1 [key2 ...]:返回所有给定集合的并集。
    • sdiffstore destination key1 [key2 ...]:将第一个集合key1与其他集合的差集元素存储在destination集合中。
    • sinterstore destination key1 [key2 ...]:将给定集合的交集元素存储在destination集合中。
    • sunionstore destination key1 [key2 ...]:将给定集合的并集元素存储在destination集合中。

    set类型的应用场景

    1、对两个集合间的数据进行交集、并集、差集运算,可以实现如共同关注、共同喜好、二度好友等功能。
    2、利用唯一性,可以统计访问网站的所有独立 IP地址。

    有序不重复集合-zset(Sorted Set)

    • 有序集合和无序集合是string类型元素的集合,集合中不允许有重复的元素。
    • 每个元素都会关联一个double类型的分数,集合中的元素通过分数从小到大进行排序。有序集合中不能有重复的元素,但可以有重复的分数(score)!
    • 因为有序集合是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是O(1)。 集合中允许存放的元素个数最大为 2^{32} - 1
    • zadd key score1 memeber1 [score2 memeber2 ...]:向有序集合key中添加一个或多个元素,或更新已存在元素的分数。
    • zcard key:获取有序集合中元素的个数。
    • zrange key start stop [withscores]: 返回有序集合中指定区间内的元素,左闭右闭区间,分数默认从低到高排序。
    • zrevrange key start stop [withscores]:返回有序集合中指定区间内的元素,左闭右闭区间,分数默认从高到低排序。
    • zcount key min max: 返回有序集合中指定区间分数的元素个数。
    • zrank key member:返回有序集合中指定成元素的索引。
    • zrem key member1 [member2 ...]:移除有序集合中一个或多个元素。
    • zremrangebyrank key start stop:移除有序集合中指定索引区间的所有元素,分数默认从低到高排序。
    • zremrangebyscore key min max:移除有序集合中指定分数区间的所有元素,分数默认从低到高排序。

    zset类型的应用场景

    1、典型的实例:排行榜;如twitter的public timeline可以将发表时间作为score来存储,这样获取数据时就是自动按时间排好序的。
    2、存储学生考试成绩;
    3、可以用做带权重的任务队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务,让重要的任务先执行。

    相关文章

      网友评论

          本文标题:Redis学习笔记(二)

          本文链接:https://www.haomeiwen.com/subject/yjjonctx.html