[redis] 安装及基础学习

187 阅读8分钟

测试环境:centos 7、 redis 6.x

一、安装

1. 下载

  • 第一种是去官网下载:https://redis.io/download/
  • 第二种用命令下载指定的版本:wget http://download.redis.io/releases/redis-6.2.14.tar.gz

2. 安装步骤(linux下)

  • 解压到 /usr/local/soft 目录下
cd /usr/local/soft
tar -zxvf redis-6.2.5.tar.gz
  • 由于下载的是redis的源码版本,需要手动去编译,需要先安装编译工具
# 安装工具
yum install -y gcc
yum install -y tcl

cd redis-6.2.5

# 编译后安装(方式一)
make MALLOC=libc
make install PREFIX=/usr/local/soft/redis

# 编译并且安装(方式二)
make && make install 

3. 启动redis及操作

  • 启动redis服务
./redis-server
  • 查看redis服务的进程号
ps -aux|grep redis
  • 连接redis服务器
# 指定主机
./redis-cli -h localhost –p 6379
# 连接本机
./redis-cli

4. 配置文件启动

redis默认的端口号是6379。redis默认加载自带的redis.conf配置文件,所以我们要修改redis的一些参数,需要在redis.conf上做修改,然后指定配置文件启动。

# 配置文件 redis.conf

# 端口号
port 6379
# 绑定的IP地址(ipv4和ipv6的本地地址,注释掉就默认允许所有地址连接)
bind 127.0.0.1 -::1
# 保护模式(改成no)
protected-mode yes
# 守护模式启动redis(后台启动)
daemonize yes
# rdb文件的文件名(快照名称)
dbfilename dump.rdb
# rdb文件的生成位置(快照的位置)
dir ./
  • 启动 ./redis-server redis.conf

二、操作 redis

1. 数据库操作命令

  • redis默认会有16个数据库,这16个数据库的名字是按照序号从0开始编号,一直到15,默认客户端一开始进入使用的是0号库,切换库的命令 select index
  • 清空当前库 FLUSHDB,清空所有库 FLUSHALL
  • redis客户端显示中文 ./redis-cli --raw

2. 操作key的相关命令

  • del指令(删除数据) del key [key ...]
  • exists指令(判断键是否存在)EXISTS key [key ...]
  • expire指令(设置键的过期时间)EXPIRE key seconds
  • pExpire指令(设置键的过期时间 毫秒)PEXPIRE key milliseconds
  • pExpireAt指令(设置过期时间戳 毫秒) PEXPIREAT key milliseconds-timestamp
  • keys指令(返回符合条件的键) KEYS pattern
    • h?llo ,匹配 hallo hello 等
    • h*llo ,匹配 hllo hallo hello 等
    • h[ea]llo ,匹配 hello hallo
  • move指令(将数据移动到另一个库中) MOVE key DBindex
  • ttl指令( 以秒为单位,返回给定key 的剩余生存时间 time to live) TTL key
    • 当key不存在时,返回-2;当key 存在但没有设置剩余生存时间时,返回-1 ;
  • pttl指令( 以毫秒秒为单位 ) PTTL key
  • randomkey指令( 从当前数据库中随机返回【不删除】 一个key ) RANDOMKEY
  • rename指令(改键名) RENAME key newkey
  • type指令(返回键所存储的值的类型)TYPE key
    • none、string、list、set、zset、hash类型

三、数据类型及操作

1. 常见的数据类型

Redis支持多种数据类型,每种类型都有其特定的用途和功能。以下是Redis中常见的数据类型:

  1. String(字符串)
    • 最基本的数据类型,一个键对应一个值。
    • 可以包含任何类型的数据,比如整数、浮点数或者字符串。
  2. List(列表)
    • 列表是有序的字符串列表。
    • 可以在列表的两端执行插入和删除操作。
    • 可以用于实现队列(FIFO)或者栈(LIFO)等数据结构。
  3. Set(集合)
    • 无序的字符串集合,不允许重复的成员。
    • 支持添加、删除、查找集合中的成员,并且可以对多个集合进行并集、交集、差集等操作。
  4. Sorted Set(有序集合)
    • 有序的字符串集合,每个成员都与一个分数相关联。
    • 可以按照分数进行排序,成员的唯一性由成员值确定,但是分数可以重复。
    • 支持按照分数范围或者成员值范围进行查询。
  5. Hash(哈希)
    • 哈希是一个键值对集合,其中键和值都是字符串类型。
    • 适用于存储对象,每个对象都有多个字段和对应的值。
  6. Bitmap(位图)
    • 位图是一种特殊的字符串,它的每个字节都可以被设置或者清除。
    • 可以进行位操作,如AND、OR、XOR等。
  7. HyperLogLog(基数估计)
    • HyperLogLog是一种概率性数据结构,用于估计集合中不重复元素的数量,即基数(cardinality)。
    • 占用的空间很小,但是提供的估计值通常是准确的。
  8. Geospatial(地理空间索引)
    • 用于存储地理位置的数据类型。
    • 可以存储经度和纬度,并执行如查找两个位置之间的距离等操作。 这些数据类型使得Redis能够应对各种不同的应用场景,从缓存到计数器、消息队列等等。

2. String 常用操作命令

命令说明
set设置一个key/value
get根据key获得对应的value
mset一次设置多个key value
mget一次获得多个key的value
getset获得原始key的值,同时设置新值
strlen获得对应key存储value的长度
append为对应key的value追加内容
getrange 索引0开始截取value的内容 到末尾-1
setex 设置一个不存在的key并且赋予过期时间设置一个key存活的有效期(秒)
psetex设置一个key存活的有效期(毫秒)
setnx存在不做任何操作,不存在添加
msetnx原子操作(只要有一个存在不做任何操作)可以同时设置多个key,只有有一个存在都不保存
decr进行数值类型的-1操作
decrby根据提供的数据进行减法操作
Incr进行数值类型的+1操作
incrby根据提供的数据进行加法操作
Incrbyfloat根据提供的数据加入浮点数(不是四舍五入)

3. List类型常用操作指令

命令说明
lpush将某个值从左边插入列表,当列表不存在的时候会进行创建,返回插入成功的条数
lpushx同lpush,当列表不存在的时候,什么操作都不做,返回插入成功的条数
rpush同lpush ,右边插
rpushx同lpushx,右边插
lpop返回和移除列表左边的第一个元素
rpop返回和移除列表右边的第一个元素
lrange获取某一个下标区间内的元素 lrange list 0 -1,含区间的元素
llen获取列表元素个数
lset给某个索引设值(索引需要存在)
lindex获取某一个指定索引位置的元素
lrem删除重复元素
linsert在某一个元素之前,之后插入新元素

3. Set类型常用命令 (如果set集合没有元素,key也就不存在了)

命令说明
sadd为集合添加元素
smembers显示集合中所有元素 无序
scard返回集合中元素的个数
spop随机返回一个元素 并将元素在集合中删除
smove从一个集合中向另一个集合移动元素 必须是同一种类型
srem从集合中删除一个元素
sismember判断一个集合中是否含有这个元素
srandmember随机返回元素 后面可以加数字 表示每次返回的个数
sdiff去掉第一个集合中其它集合含有的相同元素
sinter求交集
sunion求和集

4. ZSet类型常用命令

  • 每个成员都关联了一个分数(score),使得成员可以根据分数进行排序。
命令说明
zadd添加一个有序集合元素
zcard返回集合的元素个数
zrange 升序 zrevrange 降序返回一个范围内的元素 如果想看看分数 withscores
zrangebyscore按照分数查找一个范围内的元素
zrank返回排名
zrevrank倒序排名
zscore显示某一个元素的分数
zrem移除某一个元素
zincrby给某个特定元素加分

5. hash类型常用命令

  • Map<String,Map<String,value>> map 存的是键值对
命令说明
hset设置一个key/value对
hget获得一个key对应的value
hgetall获得所有的key/value对
hdel删除某一个key/value对
hexists判断一个key是否存在
hkeys获得所有的key
hvals获得所有的value
hmset设置多个key/value
hmget获得多个key的value
hsetnx设置一个不存在的key的值
hincrby为value进行加法运算(只能针对数值做运行)
hincrbyfloat为value加入浮点值

6. bitmap(位图数据类型)

  • 用于存储(bit)类型的数据,通常用于记录某种状态或者标记是否发生过某个事件。

  • 位图不是真正的数据类型,它是定义在字符串类型中,一个字符串类型的值最多能存储512M字节的内容

    image.png

    image.png

    image.png

命令说明
SETBIT key offset value设置某位上的值
getbit k1 7获取某位上的值
BITPOS key 0/1 [start] [end]返回指定值在指定区间上首次出现的位置下标
BITOP AND destkey key [key ...]对一个或多个 key 求逻与,并将结果保存到 destkey
BITOP OR destkey key [key ...]对一个或多个 key 求逻辑或,并将结果保存到 destkey
BITOP XOR destkey key [key ...]对一个或多个 key 求逻辑异或,并将结果保存到 destkey
BITOP NOT destkey key对给定 key 求逻辑非,并将结果保存到 destkey
BITCOUNT key [start] [end]统计指定区间上值为1的个数
  • 应用场景
    • 网站用户签到的天数统计
      • 以用户ID为key,天数为offset,当天签到置为1
    • 按天统统计网站活跃用户(一亿活跃用户1年才占用4GB左右的数据)
      • 以日期为key,用户ID为offset,当前在线则置为1
    • 用户在线状态,在线人数统计
      • 用户ID为offset,在线则置为1,bitcount来统计在线人数

7. HyperLogLog(基数估计)

8. Geospatial(地理空间索引)