<学习笔记> Redis基础知识

文章详细介绍了Redis中的数据库操作,包括切换数据库、查看数据库大小等基本命令。接着深入讨论了String类型的数据操作,如计数、追加、设置过期时间等,并提到了其他数据类型如zset的使用,如添加、检索和范围查询。此外,还提及了地理位置类型(geo)和特殊数据结构HyperLogLog及Bitmap的应用场景和操作方法。
摘要由CSDN通过智能技术生成

1. redis默认是16个数据库,默认使用的是第0个

2. 基本命令:

        set name jack:在当前数据库中加入key为name,value为jack的数据

        get name:获取当前数据库中key为name的值

        del name:删除当前数据库中key为name的数据

        select 3:切换到第四个数据库;

        dbsize:查看数据库的大小

        keys *:查看当前数据库中的所有的key

        flushdb:清楚当前数据库

        flushall:清楚全部数据库中的内容

        exists name:判断key为name的键是否存在,存在返回1,否则返回0

        move name 1:把当前数据库中key为name的数据移动到数据库1中

        expire name 10:为key为name的数据设置10s的过期时间

        ttl name:返回key为name的数据的剩余生存时间,以秒为单位

        type name:返回key为name所存储的值的类型

String类型:

应用场景:value除了可以是字符串还可以是数字

        计数器、统计多单位的数量、粉丝数、对象缓存存储

        append key1 hello:追加字符串,如果当前key不存在,就相当于set key,返回操作完成后字符串的长度。

        strlen key1:获取字符串的长度

        incr views:key为view自增1,若key不存在,则先set并初始化0,再自增1(i++)

        decr views:自减1,若key不存在,则先set并初始化0,再自减1(i--)

        incrby views 10:设置自增的量为10(i+=10)

        decrby views 10:自减10(i-=10)

        getrange key1 0 3:截取字符串[0,3]

        getrange key1 0 -1:获取全部字符串,和get key是一样的

        setrange key2 1 xx:替换指定位置开始的字符串(如:abcdefg ——> axxdefg)

        setex(set with exprise):设置过期时间(setex key3 30 "hello":设置key3的值为hello,30s后过期)

        setnx(set if not exist):不存在再设置(在分布式锁中会常常使用)(setnx mykey "redis":如果mykey不存在,创建mykey,存在则创建失败)

        mset k1 v1 k2 v2 k3 v3:同时设置多个值

        mget k1 k2 k3:同时获取多个值

        msetnx k1 v1 k4 v4:msetnx是一个原子性的操作,要么一起成功,要么一起失败(k1已经存在了,所以k4也创建失败)

        set user:1 {name:zhangsan,age:3}:设置一个user:1对象,值为json字符来保存一个对象

                这里的key是一个巧妙的设计:user:{id}:{filed}

        mset user:1:name zhangsan user:1:age 2

        mget user:1:name user:1:age ——>"zhangsan"    "2"

        getset db redis:如果不存在值,则返回nil,如果存在,先获取原来的值,并设置新的值

zset类型:

        zadd key score member:添加元素到集合中(score可以重复,但是member不能重复)

        zrange key start stop [withscores]:通过索引区间返回有序集合指定区间内的成员

        zrevrange key start stop [withscores]:返回有序集中指定区间内的成员,通过索引,分数从高到低

        zrangebyscore key min max [withscores] [limit]:通过分数返回有序集合指定区间内的成员

        zrevrangebyscore key max min [withscore] [limit]:返回有序集中指定分数区间内的成员,分数从高到低排序

        zcount key min max:计算在有序集合中指定区间分数的成员数

特殊数据类型:

geospatial地理位置类型:

        geoadd:添加地理位置的坐标

                geoadd key longitude latitude member [longitude latitude member...]

                用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置

                名称(member)添加到指定的 key 中。

        geopos:获取地理位置的坐标

                geopos key member [member...]

                用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回                 nil。

        geodist:计算两个位置之间的距离

                geodist key member1 member2 [ m | km | ft(英尺) | mi(英里) ]

                member1 member2为两个地理位置

        georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合

                georadius key longitude latitude radius m | km | ft | mi [withcoord] [withdist] [withhash]                 [count count] [asc | desc] [store key] [storedist key]

                以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距

                离的所有位置元素

        georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合

                georadiusbymember key member radius m | km | ft | mi [withcoord] [withdist] [withhash]                 [count count] [asc | desc] [store key] [storedist key]

                参数说明:

                withdist:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回

                withcoord:将位置元素的经度和纬度也一并返回

                withhash:以52位有符号整数的形式,返回位置元素经过原始 geohash 编码的有序集合

                分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

                count:限定返回的记录数

                asc:查找结果根据距离从近到远排序

                desc:查找结果根据从远到近排序

        geohash:返回一个或多个位置对象的geohash值

                geohash key member [member...]

                redis geo 使用geohash来保存地理位置的坐标。

                geohash用于获取一个或多个位置元素的geohash值。

        geo底层的实现原理其实就是zset,我们可以使用zset命令来操作geo。

        zrange China:city 0 -1:查询地图中全部的元素

        zrem China:city beijing:移除指定元素

Hyperloglog数据结构:

        用于做页面访问数量的统计,同一个人访问多次,算一次。有0.81%的错误率,但是用来做访问数量的统计,不必太精确,可以忽略不计。

        Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量

        或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。

        在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同

        元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

        但是,因为 HyperLogLog 只会根据输入元素来计算基数(不重复的元素),而不会储存输入

        元素本身,所以         

        HyperLogLog 不能像集合那样,返回输入的各个元素

        pfadd key element [element...]:添加指定元素到Hyperloglog中。

        pfcount key [key...]:返回给定Hyperloglog的基数估算值。

        pfmerge destkey sourcekey [sourcekey...]:将多个Hyperloglog合并为一个Hyperloglog。

BitMap数据结构:

        setbit key index value:

        用于为某个索引上的值赋为0和1.,这里的index必须替换为索引,value只有0/1两种选择。

        getbit key index:

        用于获取某个索引上的值,这里的index必须替换为索引

        bitcount key:用于统计指定key中所有值为1的位的和

        应用场景:

        日活跃用户统计:

                当数据量很小且userId分布不均时,不适合使用bitmap,因为userId作为index,那么

                bitmap的长度就要能容纳下最大的userId,而日活又很小,会浪费大量空白数据。

                反之当数据量很大且userid连续时,bitmap能发挥巨大优势,节省存储开销、统计速度

                快。

        点赞:

                点赞的业务场景一般是类似于统计一篇文章的点赞数量,需要注意的是同一个人不可以

                重复点赞,那么很明显,在点赞数很大的情况下,bitmap可以高效的实现,且天然自带

                去重属性,具体实现方式如下:

                        setbit articleId userId 1  //以文章id作为key,用户id作为索引

                        bitcount articleId  //获取文章点赞数量

        链接:(152条消息) Redis中bitmap使用详解_Koi-Koi的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值