Redis-笔记1

Redis学习笔记第一部分,关于redis的安装配置、常用命令和数据类型及其应用场景

1.redis安装及配置

下载

访问Reids官网进行下载,下载完成后将压缩包传入linux虚拟机中的 /opt/ 文件夹下

解压

进入/opt/中,解压

1
tar -zxvf redis-7.2.1.tar.gz

安装

进入redis-7.2.1的文件夹中,执行make命令

1
cd /opt/redis-7.2.1/

进入后

1
make && make install

等待安装完成即可

默认安装位置在 /usr/local/bin

/usr/local/ 相对于 Windows的C:/Program Files

修改配置文件

进入redis-7.2.1的文件夹,可以看到名为 redis.conf 的配置文件。保险起见,不在这个文件上进行修改,将这个文件复制到一个自定义的地方,在复制文件中进行修改

1
2
mkdir /myredis
cp redis.conf /myredis/redis7.conf

执行完以上命令后,进入redis7.conf进行修改

1
2
cd /myredis/
vim redis7.conf

修改以下4处地方

输入 / + 关键字 可以在全文范围内搜索,**:set nu显示行号, 按 n 跳转到下一个关键词,按 i 进行插入,Esc退出编辑,输入:wq** 保存并退出文件

启动redis

输入命令

1
redis-server /myredis/redis7.conf

查看redis的进程

1
ps -ef|grep redis|grep -v grep

连接redis

连接redis用以下命令,其中 -a 指Authentication required(身份验证),后面接着配置文件中设置的密码。**-p**指指定端口号,不写的话默认为6379

1
redis-cli -a 123456 -p 6379

注意当客户端需要使用中文时,会出现中文乱码,所以可以在后面加上 –raw

1
redis-cli -a 123456 -p 6379 --raw

重开一个终端窗口,再次查看进程可以看到已经存在一个连接了

连接上redis后,输入ping,正常的话会显示PONG

退出、关闭和卸载redis

如果需要退出客户端,输入quit

如果需要关闭客户端,输入shutdown,也可以在redis外输入redis-cli -a 123456 shutdown

如果需要卸载redis,首先需要停止redis-server服务,然后删除 /usr/local/lib下有关redis的文件

1
rm -rf /usr/local/bin/redis-*

2.关于Key的常用命令

  • set k1 va1

    • 插入一个key为k1,value为v1的数据
  • **keys ***

    • 查看当前库的所有key
  • exists key

    • 判断是否存在某个key
  • tpye key

    • 查看该key是什么类型
  • del key

    • 删除指定的key数据
  • unlink key

    • 非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作
  • ttl key

    • 查看还有多少秒过期,-1代表永不过期,-2代表已过期
  • expire key 秒钟

    • 给key设定过期时间
  • move key 0~15

    • 将当前数据库的key移动到给定的数据库中
  • select 0~15

    • 切换数据库(0~15),默认为0
  • dbsize

    • 查看当前数据库key的数量
  • flushdb

    • 清空单腔库
  • flushall

    • 清空所有库

3.十大类型之 String

set key value

设置键值

以下是可选参数

[ NX | XX ]

带上NX代表:若键存在则命令无效,不存在则设置键值

带上XX代表:若键存在则进行覆盖,不存在则设置键值

[ GET ]

带上GET代表将原本的值返回,若不存在则返回nil,最后用新值覆盖旧值

[ EX | PX | EXAT | PXAT | KEEPTTL ]

EX: 以秒为单位设置过期时间

PX: 以毫秒为单位设置过期时间

EXAT: 设置以秒为单位的UNIX时间戳所对应的时间为过期时间

PXAT: 设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间

KEEPTTL: 保留键在更改前所带的生存时间(因为默认情况下,当键的值发生更改时,其生存时间也会默认变为-2,即永不过期,所以在对键进行修改时带上keepttl就可以保留其原来的生存时间

mset | mget | msetnx

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

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

**msetnx k1 k4 k5 k6 **:

​ 键不存在的情况下设置多个键,需要注意的是msetnx中只要有一个是已存在的,那么所有对键的设置都不会执行,比如这里k1已经存在,则k4 k5 k6都不会被设置

getrange | setrange

getrange k1 start end : 取k1中索引为start和end范围内的值

setrange k1 start end:设置k1中索引为start和end范围内的值

incr | incrby | decr | decrby

incr 数值递增、incrby 增加指定数值、decr 数值递减、decrby 减少指定数值

strlen | append

strlen k1 :获取k1长度

append k1 v1:在k1后追加v1

getset

getset k1 v1 等同于 set k1 v1 get

应用场景

缓存数据:将经常使用的数据存储在 Redis 中,可以提高访问速度。

计数器:可以使用 Redis 的incr命令实现计数器功能,如统计点赞量、浏览量

4.十大类型之 List

Redis 中的 list 底层由双向链表实现,所以可以从两侧进行插入的操作,主要功能有 push / pop

lpush | rpush | lrange

lpush list1 1 2 3 4 5 :从list1的头部插入1 2 3 4 5

rpush list2 11 22 33 44 55 :从list2的尾部插入11 22 33 44 55

lrange list1 0 -1:从头部遍历list1,只有 lrange 没有 rrange

lpop | rpop

类似于队列,lpop是删除队头元素并返回,rpop删除队尾元素并返回

**lindex **

lindex list index :获取list中索引为index的元素

llen

llen list : 获取list的长度

lrem

lrem 中rem可以指remove,list是列表名 ,n是指要删除多少个,v1是指一个有重复的值

这条命令可以理解为 删除list中n个值为v1的元素

lrem list1 4 1 :删除list1中的4个1

ltrim

ltrim list1 1 6 :截取list1中索引为1和6之间的内容

rpoplpush

rpoplpush list1 list2 :从list1的尾部删除一个元素,并将该元素插入到list2的头部

lset

lset list1 1 abcd :将list1中索引为1的元素设为abcd

linsert

linsert list1 before 3 java :在 list1 中找到 3 这个元素,并在其前面插入一个java

before 也可以是 after , 即在指定位置的后面插入

如果list中有重复的值,那么只会在查找到的第一个值前后插入

应用场景

消息列表:微博、微信朋友圈、公众号等

5.十大类型之 Hash

hset | hget

与String类似

hset user:001 id 01 name z3 age 18:为user:001的id赋值为01,name为z3,age为18

hset可以批量赋值,所以后来hmset已经被视为弃用了

hget user:001 id:获取user:001的id

hmget

hmget user:001 id name age : 同时获取user:001的id,name和age

hgetall

hgetall user:001 : 遍历user:001

hdel

hdel user:001 age : 删除user:001的age

hlen

hlen user:001 : 获取user:001内的key的数量

hexists

hexists user:001 id : 判断user:001是否存在id. 是则返回1,否则返回0

hkeys | hvals

hkeys user:001 : 获取user:001内所有的key

hvals user:001 : 获取user:001内所有的value

hincrby | hincrbyfloat

hincrby user:001 age 2 : 给user:001的age增加2

hincrbyfloat user:001 score 0.5 : 给user:001的score增加0.5

注意当一个值为浮点型时,只能用hincrbyfloat进行增加

但反之如果是整型,仍然可以使用hincrbyfloat

hsetnx

hsetnx user02 id 02 : 当id不存在时,设定user02的id为02,若存在则命令无效

应用场景

系统中对象数据的存储如:电商系统购物车、用户信息等

6.十大类型之 Set

sadd

sadd set1 1 1 1 1 2 3 4 5 : 给set1插入1,2,3,4,5 , 其中重复的元素只会插入一次

smembers

smembers set1 : 遍历set1的所有元素

sismember

sismember set1 1 :判断1是否为set1中的元素,是则返回1,否则为0

srem

srem set1 1 2 3 : 删除set1中的1,2,3. 返回成功删除的个数

scard

scard set1 : 获取set1中的元素个数

srandmember

srandmember set2 3 : 随机展示set2中的3个元素,不会删除元素

spop

spop set2 2 : 随机弹出set2中的2个元素,出一个删一个

smove

smove set1 set2 6 : 将set1中的6移动到set2

sdiff | sunion | sinter

sdiff set1 set2 : 返回 set1 - set2 的差集

sunion set1 set2 : 返回 set1 和 set2 的并集

sinter set1 set2 : 返回 set1 和 set2 的交集

sintercard

sintercard 2 set1 set2 limit 10 : 返回 set1 和 set2 这 2 个集合交集的元素个数,最大值为10

应用场景

抽奖:spop、srandmember都可以随机获取元素

可能认识的人、同赞好友:通过集合运算得到交集、并集等

7.十大类型之 Zset

zadd

zadd zset1 60 n1 70 n2 65 n3 : 给zset1中添加元素及其分数,n1分数60,n2分数70,n3分数65

zrange | zrevrange

zrange zset1 0 -1: 遍历zset1

**zrevrange zset1 0 -1 **:倒序遍历zset1

zrangebyscore

zrangebyscore zset1 60 65: 根据60-65的区间,返回zset1在此区间范围内的元素

zrangebyscore zset1 60 65 withscores: withscore连同分数是多少一起返回

zrangebyscore zset1 (60 (65 withscores: (60 (65指不包含60和65

zrangebyscore zset1 (60 (65 withscores limit 0 2 : limit 0 2 指从0开始,只取2个元素

zscore

zscore zset1 n1: 获取zset1中n1的分数

zcard

zcard zset1: 获取zset1中的元素个数

zrem

zrem zset1 n1: 删除zset1中的n1

zincrby

zincrby zset1 10 n2: 给zset1中的n2分数增加10

zcount

zcount zset1 60 70 : 获取zset1中分数在60到70间的元素个数

zmpop

从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员分数对。

zmpop 2 set set1 min count 4 : 弹出 set (第一个非空排序集) 中最小的4个值

参考:http://t.csdn.cn/xA0L3

zrank | zrevrank

zrank zset1 n2: 返回zset1中n1的索引

zrevrank zset1 n2: 返回zset1中n1的倒序索引

应用场景

排行榜:由于zset带有score属性,所以很适合用于排行榜

8.十大类型之 Bitmap

setbit | getbit

**setbit k1 0 1 **: 给位图k1中下标为0处的值设为1

getbit k1 0 : 获取位图k1中下标为0处的值

strlen

strlen k1 : 获取k1的长度,这里的长度以byte为单位,k1中如果只有8个bit,则返回1.

每超过一个byte就扩容一个byte,比如9个bit就返回2

bitcount

**bitcount k1 **:统计k1中 1 的数量

bitop

参考:BITOP — Redis 命令参考 (redisfans.com)

应用场景

保存状态信息:如每天的签到情况、登录情况、活跃度等

9.十大类型之 HyperLogLog

pfadd

pfadd hpll1 1 2 3 4 5 6 : 向hpll1输入元素1 2 3 4 5 5 5,但元素不会进行存储,只会去重统计基数

pfcount

pfcount hpll1 :返回hpll1统计得到的基数

pfmerge

pfmerge hpll3 hpll1 hpll2 : 合并hpll1和hpll2,得到hpll3

应用场景

统计访问量、浏览量

10.十大类型之 GEO

由于GEO是属于zset的一种,所以zset的方法也适用于GEO

GEO用于存储某个地址的经纬度,关于经纬度坐标可以在网上获取到:拾取坐标系统 (baidu.com)

geoadd

geoadd myaddress 116.363909 23.267944 小刀电动车 116.363675 23.268031 天能电池:向myaddress中插入两个地址,类似于zset,不过原来的score换成了坐标

geopos

geopos myaddress 小刀电动车 :获取“小刀电动车”的坐标

geohash

geohash myaddress 小刀电动车:获取“小刀电动车”的坐标映射

geodist

geodist myaddress 小刀电动车 天能电池 m : 获取这两地之间的距离,以米为单位,可选[ m | km | ft | mi ],分别代表米、千米、英尺、英里,不选则默认为m

georadius

georadius myaddress 116.xxx 23.xxx 100 m withdist withhash withcoord count 10 desc : 查询myaddress中,在以116.xxx 23.xxx为中心,距离100米内的地址,返回地址名、距离、地址哈希码、地址坐标,按降序排列,上限为10

georadiusbymember

georadiusbymember myaddresss location1 100 m withdist withhash withcoord count 10 desc:与上一条命令相同,但是中心坐标是使用myaddress中的location1

应用场景

存储地址

11.十大类型之 Stream

在Stream中+和-分别代表最大和最小可能出现的id

xadd

xadd mystream * k1 v1 k2 v2 : 向mystream中插入两条消息k1和k2,值为v1和v2。id的位置上的 * 代表自动生成id。插入后返回id,id由2部分组成,“毫秒时间戳-当前消息在同毫秒内的消息序号”

xrange | xrevrange

xrange mystream - + count 10:按照时间戳由小到大的顺序,返回mystream中10条消息,count是可选参数

xrevrange mystream - + count 10 : 与上面的命令相似,但是倒序

xlen

xlen mystream : 返回mystream中的消息数量

xdel

xdle mystream 1695540348043-0 :删除id为1695540348043-0的消息

xtrim

xtrim mystream maxlen 2 : 截取mystream,只保留最近2条消息

xtrim mystream minid 1695540348043-0 : 截取mystream,只保留id大于等于1695540348043-0的消息

xread

**xread count 2 streams mystream 0-0 **: 从最小id开始,获取mystream中的2条消息,0-0也可以是0 | 00 | 000

xread count1 block 0 streams mystream $ : 永远阻塞,直到在mystream中读取到比目前最大id还大的1条消息为止

xgroup creat

xreadgroup group

xpending

xack

xinfo