Redis常见类型指令

1.redis是什么

        Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的key-value数据库提供了丰富的数据结构,例如String、Hash、List、Set、Sorted等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案。

官网:Commands | Redis

2.常用命令

  • keys * 查看当前库所有的key
  • exists key 判断某个key是否存在
  • type key 查看你的key是什么类型
  • del key 删除指定的key数据
  • unlink key 非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。
  • ttl key 查看还有多少秒过期,-1表示永远不过期,-2表示已经过期
  • expire key 秒钟,为给定的key设置过期时间
  • move key dbindex [0,15] 将当前库的key移动到给定的数据库db中
  • select dbindex 切换数据库[0,15] 默认为0
  • dbsize 查看当前数据库key的数量

牢底坐穿指令

  • flushdb 清空当前库
  • flushall 通杀全部库

3.数据类型命令及落地应用

备注:命令不区分大小写,而key是区分大小写的。永远的帮助指令,help @类型(help @string,help @list)

3.1 String(字符串)

        string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。一个redis中字符串value最多可以是512M

        常用指令:

比较常用:

set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]

官网翻译如下:

        每次使用set key value会重新指定过期时间为永久如果不指定时间。使用keepttl可以保留设置前指定键的生存时间。示例如下:

mset:同时设置一个或者多个key-value对。

mget:获取所有(一个或者多个)给定key的值。

msetnx:同时设置一个或多个key-value对,当且仅当所有给定key都不存在。

getrange:获取指定区间范围内的值,类似between...and的关系。从零到负一表示全部

setrange:设置指定区间范围内的值,格式是setrange key值

setex:设置带过期时间的key,动态设置 秒值

setnx:只有在key不存在时设置key的值

getset:将给定key的值设为value,并返回key的旧值(old value).简单来收就是先get再set

应用场景:

例子一:比如抖音无限点赞某个视频后者商品,点一下加一次

例子二:阅读数:只要点击了文章地址,直接可以使用incr key命令增加一个数字1,完成记录数字

3.2List(列表)

        redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它底层实际是个双端链表,最多可以包含2^32 - 1个元素(4294967295, 每个列表超过40亿个元素)。

主要功能由push/pop等,一般用于栈、队列、消息队列等场景。

left、right都可以插入添加;

如果键不存在,创建新的链表

如果键已存在,新增内容

如果值全部移除,对应的键也就消失了。

对两端的操作性能很高,通过索引下标的操作中间的节点性能会比较差。

常用指令如下:

lpush:将一个或者多个值依次放到左边

lrange:遍历list

lpop、rpop:从左右两边移除数据

lindex:通过索引获取列表中的元素

lrem key 数字N:从左到右删除N个值等于key的元素,返回的值为实际删除的数量。

lrem list3 0 -1 表示删除全部给定值。

ltrim:截取指定区间的元素,格式是ltrim list的key 起始索引 结束索引

rpoplpush:移除列表的最后一个元素,并将该元素添加到另一个列表并返回

lset key index value:将list的索引为index的值替换成value

linsert key before/after 已有值 插入的新值:在list某个已有值的前后再添加具体值

应用场景:微信公众号订阅号的消息

3.3 哈希Hash

        Redis hash是一个string类型的field(字段)和value(值)的映射表,hash特别适合用于存储对象。KV模式不变,但V是一个键值对 Map<string,Map<object,object>>

常用命令:

hset/hget/hmset/hmget/hgetall/hdel:

hlen: 获取某个key内的全部数量

hexists key:在key里面的某个值的key

hkeys/hvals:

hincrby/hincrbyfloat:

hsetnx:

应用场景:

JD购物车早期 设计目前不再采用,当前小中厂可用

3.4 集合set

        Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不可能出现重复的数据,集合对象的编码可以是insert或者hashtable。set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是o(1).

常用命令:

案例:

sadd/smembers 

sismember key member:

srem key member:

scard 获取集合里面的元素个数:

srandmember key N:从集合中随机展示设置N个元素,元素不删除

spop key N:从集合中随机弹出N个元素,出一个删一个

smove key1 key2:在key1里已存在的某个值,将key1里已经存在的某个值赋给key2

集合差集 sdiff key1 key2 :属于key1但是不属于key2

集合并集 属于A或者属于B sunion key1 key2:

集合交集 sinter key1 key2 :属于A同时也属于B

应用场景:

1.微信抽奖小程序:

2.微信朋友圈点赞查看同赞朋友

3.qq内推可能认识的人

3.5 有序集合Zset(sorted set)

        zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数去可以重复,并且zset是通过哈希表实现的,所以添加,删除,查找的复杂度都是o(1).

常用:

案例:

zadd key score member 添加元素:

zrevrange:按照分数反向排序

zrangebyscore key min max :获取指定分数范围的元素 ( 表示不包含

zcard: 获取集合中元素的个数

zcount:获取分数区间内元素个数,zcount key 开始分数区间 结束分数区间

zrank:获取valuezaizset中的下标位置

zscore:按照值获取对应的分数

zrem:删除元素,格式是zrem zset的key项的值,项的值可以是多个,zrem key score某个对应,可以是多个

zmpop:

zrevrank key values值:

应用场景:根据商品销售对商品进行排序显示

3.6 位图bitmap

基本命令:

案例:

setbit

strlen:

bitcount:全部键里面含有1的有多少个

bitop:

getbit:

一年365天,全年天天登录占用多少字节

按年去存储一个用户的签到情况,365 天只需要 365 / 8 ≈ 46 Byte,1000W 用户量一年也只需要 46 * 10000000 / (1024 * 1024)= 440 MB 就足够了

假如是亿级的系统,

每天使用1个1亿位的Bitmap约占12MB的内存(10^8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高。

此外,在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录以节省内存开销。

3.7 HyperLogLog

        HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,再输入元素的数量或者体积非常大时,计算基数所需的空间总是固定且是很小的。

        在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2^64个不同的元素的基数。这和计算基数时,元素越多耗费内存就越多的几何形成鲜明的对比。但是,因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。

        需求:统计某个网站的UV(Unique vistor,独立访客,一般理解为客户端IP),用户搜索网站关键词的数量,统计用户每天搜索不同词条的个数。

        基数:是一种数据集,去重复后的真实个数

        基本命令:

3.8 CEO地理空间

        主要用于存储地理位置信息,并对存储的信息进行操作,包括 1.添加地理位置的坐标。2.获取地理位置的坐标。3.计算两个位置之间的距离。根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

        简介:

原理:

常用命令:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值