Redis6 基础入门之常见数据类型、新数据类型、常用命令


前言

现在在去哈尔滨的高铁上写这篇笔记,哈!真是气氛组🌀


提示:以下是本篇文章正文内容,下面案例可供参考

一、Redis特点与应用

1.特征

  1. 键值对数据库,高性能;
  2. 数据间没有必然关系;
  3. 内部采用单线程机制工作(保证数据安全问题);
  4. 多数据类型支持 string,list,hash,set,sorted_set;
  5. 可做持久化支持;
  6. redis默认有10个数据库,默认用的是0号数据库,通过select 0~15切库
  7. 单线程+多路IO复用,支持持久化和多数据类型
  8. 多路IO复用:在等待结果时可以做其他事情

2.应用

  1. 热点数据加速查询;
  2. 任务队列(秒杀抢购购票);
  3. 即时数据查询(公交到站信息,网站人数);
  4. 时效信息(验证码);

二、key操作与数据类型

1.key操作

在根目录/下用/usr/local/bin/redis-cli启动redis

  • keys * 查看键
  • exists k1 是否存在 k1 存在返回1,否则为0
  • del k1 删除键
  • unlink k1 根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除在后序的异步删除
  • expire k1 10 给定的key设置过期时间
  • ttl key 查看还有多久过期,-1永不过期,-2已过期(不设置过期时间就是永不过期)
  • dbsize 当前库中的key 的数量
  • flushdb 清空当前库

2.常见数据类型

2. string字符串

  • append k1 abc 追加字符串

  • setnx k1 v100 若存在key,则插入失败

  • incr k3 对数字类型+1

  • redis的incr是一个原子操作

  • mset k1 v1 k2 v2 k3 v3 批量插入

  • msetnx k11 v11 k12 v12 若存在key,则插入失败

  • getrange key 0 3 获取字符串下标0~3的值 setrange类似

  • setex key 20 value30 设置过期时间为20秒,值为value30

  • getset k1 aaaa 获取k1的旧值,同时以aaaa替换旧值

    string结构

    类似于Java的arraylist,预分配冗余空间。字符串长度<1M,加倍扩容;字符串长度>1M,最多扩容1M,字符串大小不会超过512M

3.原子操作

​ 即不会被线程调度机制打断的操作,操作从开始到结束不会有上下文切换

​ 多线程中,保证一个操作不会被打断叫原子操作

Java中的i++不是原子操作(两个线程对于i++可能会有打断的情况)

4.list列表

底层是一个双向列表, 多个压缩列表ziplist用链表形式组成quickList

  • lpush/rpush 从左边/右边插入一个或多个数据
  • lrange k1 0 -1 从左开始取所有的值
  • lpop/rpop 从左/右端取出一个值,取出后,键就不存在了
  • linsert k2 before "v11" "newv11"
  • lrem k2 1 "v2" 从左边开始删除1个值为v2的元素

5.set集合

自动排重且元素无序,string类型的无序集合,底层是一个value为null的hash表(字典)

  • smembers k1 查看set成员
  • sadd k1 v1 v2 v3添加数据
  • sismember k1 v1 元素是否存在
  • spop k1 集合中随机吐出一个值
  • srandmember k1 2 随机取出2个值
  • smove k1 k2 v1 k1中的v1移动到k2
  • sinter k1 k2 取两个集合的交集
  • sunion k1 k2 并集
  • sdiff k1 k2 差集

6.hash集合

键值对的集合,特别适合存储对象

存储方式 key-field-value

  • hset user:1001 id 1 hset user:1001 age 20
  • hget user:1001 id 获取value
  • hmset user:1002 ud 2 name lisi age 30 批量加入
  • hexists user:1002 name 是否存在该键
  • hkeys user:1002 查看对象所有的key
  • hvals user:1002 查看所有的值
  • hincrby user:1002 age 2 value加2
  • hsetnx user:1002 gender 1 如果已经存在则无法添加
  • Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。

7.Zset 有序集合

每个数据成员会关联一个评分,根据评分对集合成员进行排序

  • zrange topn 0 -1 查看所有数据成员
  • zrange topn 0 -1 withscores 查看并显示评分
  • zrangebyscore topn 300 500 withscores 显示评分在300~500内的数据成员
  • zrevrangebyscore topn 500 300 withscores 逆序
  • zincrby topn 50 java java对应的value值+50
  • zcount topn 200 300 计算范围内的成员数量
  • zrank topn java 查看Java的排名

底层结构 底层用了两个数据结构,hash-》用作关联元素的value和权重score,保证value是唯一的

​ 跳跃表,效率高
在这里插入图片描述

2.Redis6新增数据类型

①Bitmaps
  • 能进行位操作的字符串

  • 以位为单位的数组,每个存储单元只能存0/1

  • 实例: 标记用户是否访问过网站

    • setbit users:20200101 1 1 设置bitmap中某个偏移量的值
    • getbit users:20200101 1 获取偏移量的值
    • bitcount users:20200101 统计字符串被设置为1的bit数。
    • 取交集 bitop and unique:users:and:20201104_03 unique:users:20201103 unique:users:20201104
  • 优点:在数据量较大时(千万以上),能极大地节省内存空间,可用于存储活跃用户

    ②HyperLogLog

    HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

    主要用于解决基数问题

    • pfadd program "java" 添加
    • pfcount program 计算元素数量
    • pfmerge k2 k1 program 合并集合
    Geospatial

    地理信息的缩写。

    • geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing 添加
    • geopos china:city beijing 城市名称取到具体的经纬度
    • geodist china:city beijing shanghai km 城市间的距离 m 表示单位为米[默认值]。km 表示单位为千米。mi 表示单位为英里。ft 表示单位为英尺。
    • georadius china:city 110 30 1000 km 以给定的经纬度为中心,找出某一半径内的元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值