Redis学习笔记(二)

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可以存储 个键值对,可将其看成一个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)!
  • 因为有序集合是通过哈希表实现的,所以添加,删除,查找的时间复杂度都是。 集合中允许存放的元素个数最大为 。
  • 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学习笔记(二))