测试环境:centos 7、 redis 6.x
一、安装
1. 下载
- 第一种是去官网下载:
https://redis.io/download/
- 第二种用命令下载指定的版本:
wget http://download.redis.io/releases/redis-6.2.14.tar.gz
2. 安装步骤(linux下)
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-server
ps -aux|grep redis
./redis-cli -h localhost –p 6379
./redis-cli
4. 配置文件启动
redis默认的端口号是6379。redis默认加载自带的redis.conf配置文件,所以我们要修改redis的一些参数,需要在redis.conf上做修改,然后指定配置文件启动。
port 6379
bind 127.0.0.1 -::1
protected-mode yes
daemonize yes
dbfilename dump.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中常见的数据类型:
- String(字符串) :
- 最基本的数据类型,一个键对应一个值。
- 可以包含任何类型的数据,比如整数、浮点数或者字符串。
- List(列表) :
- 列表是有序的字符串列表。
- 可以在列表的两端执行插入和删除操作。
- 可以用于实现队列(FIFO)或者栈(LIFO)等数据结构。
- Set(集合) :
- 无序的字符串集合,不允许重复的成员。
- 支持添加、删除、查找集合中的成员,并且可以对多个集合进行并集、交集、差集等操作。
- Sorted Set(有序集合) :
- 有序的字符串集合,每个成员都与一个分数相关联。
- 可以按照分数进行排序,成员的唯一性由成员值确定,但是分数可以重复。
- 支持按照分数范围或者成员值范围进行查询。
- Hash(哈希) :
- 哈希是一个键值对集合,其中键和值都是字符串类型。
- 适用于存储对象,每个对象都有多个字段和对应的值。
- Bitmap(位图) :
- 位图是一种特殊的字符串,它的每个字节都可以被设置或者清除。
- 可以进行位操作,如AND、OR、XOR等。
- HyperLogLog(基数估计) :
- HyperLogLog是一种概率性数据结构,用于估计集合中不重复元素的数量,即基数(cardinality)。
- 占用的空间很小,但是提供的估计值通常是准确的。
- 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(位图数据类型)
| 命令 | 说明 |
|---|
| 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(地理空间索引)