文章目录
- 1. redis网址
- 2. 安装redis
- 3. redis10大类型及操作命令
- 3.1 key操作命令
- 3.1.1 redis-server重启后数据不会消失
- 3.1.2 keys * 显示所有的key
- 3.1.3 exists 判断key是否存在,存在则计数加1
- 3.1.4 type 显示出类型
- 3.1.5 del 删除指定key,返回结果为被删除的真实存在的key的个数,不存在则不参与计数
- 3.1.6 unlink 非阻塞删除key,仅仅将key从keyspace元数据中删除,真正的删除会在后续异步中操作,是为了防止key过大删除时间过长进行阻塞
- 3.1.7 expire 设置过期时间 秒钟
- 3.1.8 ttl 查看还有多少秒过期 -1代表永不过期,-2代表已经过期或者key本来就不存在
- 3.1.9 move key dbindex[0-15] 将key移动到指定库当中
- 3.1.10 dbsize 查看当前数据库key的数量
- 3.1.11 flushdb 清空当前库
- 3.1.12 flushall 清空所有库
- 3.1.13 命令不区分大小写,key区分大小写
- 3.1.14 help @类型
- 3.2 String类型操作命令
- 3.2.1 string类型最大容量512MB
- 3.2.2 set key value [nx | xx] nx 代表key不存在才设值,xx代表key已存在才设值
- 3.2.3 set key value get 设新值时返回旧值
- 3.2.4 getset key value 同上
- 3.2.5 set key value ex 10 设置过期时间 时间单位为秒钟
- 3.2.6 set key value px 10 设置过期时间 时间单位为毫秒
- 3.2.7 set key value [exat | pxat] 秒时间戳/毫秒时间戳
- 3.2.8 set key value keepttl 重新设值时保留之前设置的过期时间
- 3.2.9 mset 批量设值
- 3.2.10 mget 批量获取值
- 3.2.11 msetnx 具有原子性,若同时有存在的key和新key,则新key设置会失败
- 3.2.12 getrange setrange 获取或设置一部分值
- 3.2.13 incr incrby 给值是数字类型的key递增
- 3.2.14 decr decrby 给值是数字类型的key递减
- 3.2.15 setnx key不存在时才设值 set if not exist
- 3.2.16 setex 设置过期时间 key可以存在也可以不存在 set with expire
- 3.3 list类型操作命令
- 3.3.1 底层是双向链表
- 3.3.2 lpush 从左边插入数据;lrange 取出数据 0 -1 代表所有-
- 3.3.3 rpush 从右边插入数据
- 3.3.4 lpop 从左边弹出一个数据;rpop 从右边弹出一个数据
- 3.3.5 lindex key index 通过索引下标获得元素
- 3.3.6 llen 获取集合长度
- 3.3.7 lrem 删除集合中等于某个值的元素若干个
- 3.3.8 ltrim key 截取出一部分集合的元素
- 3.3.9 rpoplpush 从源列表的右边取一个值放到目的列表的左边,源列表会减少一个元素,目标列表可以不存在,会增加一个元素,源列表不存在返回nil,适用于消息队列
- 3.3.10 lset 给集合中的某个元素重新设值
- 3.3.11 linsert 插入新值,只会插入一个位置
- 3.4 hash类型操作命令
- 3.4.1 hset hmset 设值; hget hmget 取值
- 3.4.2 hgetall
- 3.4.3 hdel 删除某个属性
- 3.4.4 hlen 获得属性的数量
- 3.4.5 hexists key field 判断某个key里面有没有某个属性
- 3.4.6 hkeys key 罗列key对应的所有属性
- 3.4.7 hvals key 罗列key对应的所有属性值
- 3.4.8 hincrby key field
- 3.4.9 hincrbyfloat
- 3.4.10 hsetnx stu1 email xinliushijian@163.com 不存在创建成功返回1,存在返回0
- 3.5 set类型操作命令
- 3.5.1 sadd set1 1 1 1 2 2 2 3 3 3 新增
- 3.5.2 smembers set1 查看
- 3.5.3 sismember set1 4 判断元素是否在集合中,存在返回1,不存在返回0
- 3.5.4 srem set1 4 删除元素
- 3.5.5 scard set1 统计有多少元素
- 3.5.6 srandmember set1 [n] 随机取出n个数字,不改变集合
- 3.5.7 spop set1 [n] 随机弹出n个元素,弹出的元素会从集合中删除
- 3.5.8 smove set1 set2 2 将set1中的元素2移动到set2中(剪切)
- 3.5.9 sdiff set3 set4 属于set3不属于set4的元素构成的集合 差集
- 3.5.10 sunion set3 set4 并集
- 3.5.11 sinter set3 set4 交集
- 3.5.12 sintercard 2 set3 set4 limit1 取两个集合的交集的基数,基数就是个数,limit 表示输出个数的限制
- 3.6 zset(有序集合 sorted set)类型操作命令
- 3.6.1 zadd zset1 1 v1 2 v2 4 v4 3 v3
- 3.6.2 zrange zset1 0 2 withscores 获取元素及score
- 3.6.3 zrevrange zset1 0 -1 withscores 倒叙获取元素及score
- 3.6.4 zrangebyscore zset1 (2 6 withscores limit 0 2
- 3.6.5 zscore zset1 v4 获取元素的分数
- 3.6.6 zrem zset1 v5 删除元素
- 3.6.7 zincrby zset1 6 v1 给v1元素的score加6
- 3.6.8 zcount zset1 2 7 获取指定分数范围内的元素个数
- 3.6.9 zmpop 1 zset1 min count 2 从一个有序集合中弹出两个score最小的元素
- 3.6.10 zrank zset2 v2 获取元素的下标
- 3.6.11 zrevrank zset1 v2 获取元素的倒序下标
- 3.6.12 场景应用
- 3.7 bitmap(位图)类型操作命令
- 3.7.1 定义
- 3.7.2 setbit bitmap1 1 1 给指定key的值的第offset赋值val,val只能是0或1
- 3.7.3 getbit key offset 获取key第offset位的值
- 3.7.4 strlen bitmap1 统计占用了多少字节数
- 3.7.5 bitcount bitmap1 返回bitmap中值为1的数量
- 3.7.6 bitop operation destkey key 对不同的二进制存储数据进行位运算(and、or、not、xor)
- 3.8 HyperLoglog(基数统计)类型操作命令
- 3.8.1 场景 HyperLoglog 返回的不是具体的元素,而是基数估算值
- 3.8.2 HyperLoglog定义
- 3.8.3 基数统计定义 集合去重后的元素个数
- 3.8.4 pfadd hll1 1 3 4 5 7 9 添加元素到HyperLoglog
- 3.8.5 pfcount hll1 返回HyperLoglog类型key的基数估算值
- 3.8.6 pfmerge destkey-hll3 hll1 hll2 将多个HyperLoglog合并为一个
- 3.8.7 HyperLoglog类型是string
- 3.9 GEO类型操作命令
- 3.9.1 geo(geology,地质)简介
- 3.9.2 GEO的类型是zset
- 3.9.3 如果显示乱码用此命令启动redis-cli:redis-cli -a 111111 -p 6379 --raw 2>/dev/dull
- 3.9.4 geoadd 多个精度(longitude)、纬度(latitude)、位置名称(member)添加到指定的key中
- 3.9.5 geopos xuzhou daxuelu ximatai 返回城市位置的坐标
- 3.9.6 geohash 返回一个一个或多个位置元素的geohash表示
- 3.9.7 geodist xuzhou ximatai hubushan km 返回两个给定位置之间的距离
- 3.9.8 georadius xuzhou 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc 返回给定位置(经纬度)一定半径内的位置
- 3.9.9 georadiusbymember xuzhou ximatai 10 km withdist withcoord count 10 withhash 返回给定位置(地名)一定半径内的位置
- 3.10 stream(redis流)类型操作命令
- 3.11 bitfield(redis位域)类型操作命令
1. redis网址
- 中文文档
- 官网
- 在线测试网址
- 命令大全
2. 安装redis
- 安装gcc
由于redis是c语言编写,所以需要安装c语言编译器gcc
yum -y install gcc-c++
- 使用xftp将官网下的包传输到linux中
- 解压安装
tar -zxvf 7.0.10.tar.gz
cd redis-7.0.10/
# 编译安装
make && make install
安装完成:
查看安装完成的redis命令
cd /usr/local/bin
- 更改配置文件redis.conf
复制一份并重命名
mkdir /myredis
cp redis.conf /myredis/redis7.conf
vi /myredis/redis7.conf
set nu# 更改四处设置:
daemonize no # 将no改为yes 运行redis后台启动,309行
protected-mode yes # 将yes改为no,不使用保护模式,当是保护模式时只允许本机访问,111行
bind 127.0.0.1 -::1 # 注释掉这行,bind后跟的是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址。举个例子:如果redis服务器(本机)上有两个网卡,每一个网卡对应一个IP地址,例如IP1和IP2。(注意这个IP1和IP2都是本机的IP地址)。我们的配置文件:bind IP1。 只有我们通过IP1来访问redis服务器,才允许连接Redis服务器,如果我们通过IP2来访问Redis服务器,就会连不上Redis,87行
# requirepass foobared # 取消注释,设置密码requirepass 111111,1036行
- 使用新的配置文件启动redis-server
redis-server /myredis/redis7.conf
- 查看进程
ps -ef | grep redis | grep -v grep
- 打开客户端
# -a指代授权authenticaton,后面跟密码;-p指代端口,也可以不写,默认6379
redis-cli -a 111111 -p 6379 # 2>/dev/null 重定向标准错误输出,就不会有警告了
ping # 返回pong,代表服务端连接成功,ctrl+c或quit退出客户端,在进程中就查不到redis-cli进程了
- 关闭redis-server
# 1. 在redis-cli中直接shutdown
# 2. 单实例关闭:redis-cli -a 111111 shutdown
# 3. 多实例关闭:可以指定多个端口号关闭 redis-cli -p 6379 shutdown
- 卸载
# 关闭redis进程,删除文件
rm -rf /usr/local/bin/redis-*
3. redis10大类型及操作命令
3.1 key操作命令
3.1.1 redis-server重启后数据不会消失
3.1.2 keys * 显示所有的key
3.1.3 exists 判断key是否存在,存在则计数加1
3.1.4 type 显示出类型
3.1.5 del 删除指定key,返回结果为被删除的真实存在的key的个数,不存在则不参与计数
3.1.6 unlink 非阻塞删除key,仅仅将key从keyspace元数据中删除,真正的删除会在后续异步中操作,是为了防止key过大删除时间过长进行阻塞
3.1.7 expire 设置过期时间 秒钟
3.1.8 ttl 查看还有多少秒过期 -1代表永不过期,-2代表已经过期或者key本来就不存在
3.1.9 move key dbindex[0-15] 将key移动到指定库当中
如果指定库中已经存在相同key,则无法移动
3.1.10 dbsize 查看当前数据库key的数量
3.1.11 flushdb 清空当前库
3.1.12 flushall 清空所有库
3.1.13 命令不区分大小写,key区分大小写
3.1.14 help @类型
3.2 String类型操作命令
3.2.1 string类型最大容量512MB
3.2.2 set key value [nx | xx] nx 代表key不存在才设值,xx代表key已存在才设值
3.2.3 set key value get 设新值时返回旧值
3.2.4 getset key value 同上
3.2.5 set key value ex 10 设置过期时间 时间单位为秒钟
3.2.6 set key value px 10 设置过期时间 时间单位为毫秒
3.2.7 set key value [exat | pxat] 秒时间戳/毫秒时间戳
# 获得秒时间戳代码: 秒时间戳1679640720
System.out.println("秒时间戳" + Long.toString(System.currentTimeMillis()/1000L));
3.2.8 set key value keepttl 重新设值时保留之前设置的过期时间
3.2.9 mset 批量设值
3.2.10 mget 批量获取值
3.2.11 msetnx 具有原子性,若同时有存在的key和新key,则新key设置会失败
3.2.12 getrange setrange 获取或设置一部分值
3.2.13 incr incrby 给值是数字类型的key递增
incr可以应用在点赞数、阅读量等场景,点一下数递增一
3.2.14 decr decrby 给值是数字类型的key递减
3.2.15 setnx key不存在时才设值 set if not exist
3.2.16 setex 设置过期时间 key可以存在也可以不存在 set with expire
3.3 list类型操作命令
3.3.1 底层是双向链表
3.3.2 lpush 从左边插入数据;lrange 取出数据 0 -1 代表所有-
应用场景:
博主发表了两篇文章,则lpush article:xinliushijian mysql1 redis1
查看主页显示前10篇文章,lrange artiche:xinliushijian 0 9
3.3.3 rpush 从右边插入数据
3.3.4 lpop 从左边弹出一个数据;rpop 从右边弹出一个数据
3.3.5 lindex key index 通过索引下标获得元素
3.3.6 llen 获取集合长度
3.3.7 lrem 删除集合中等于某个值的元素若干个
3.3.8 ltrim key 截取出一部分集合的元素
3.3.9 rpoplpush 从源列表的右边取一个值放到目的列表的左边,源列表会减少一个元素,目标列表可以不存在,会增加一个元素,源列表不存在返回nil,适用于消息队列
3.3.10 lset 给集合中的某个元素重新设值
3.3.11 linsert 插入新值,只会插入一个位置
3.4 hash类型操作命令
3.4.1 hset hmset 设值; hget hmget 取值
3.4.2 hgetall
3.4.3 hdel 删除某个属性
3.4.4 hlen 获得属性的数量
3.4.5 hexists key field 判断某个key里面有没有某个属性
3.4.6 hkeys key 罗列key对应的所有属性
3.4.7 hvals key 罗列key对应的所有属性值
3.4.8 hincrby key field
3.4.9 hincrbyfloat
3.4.10 hsetnx stu1 email xinliushijian@163.com 不存在创建成功返回1,存在返回0
3.5 set类型操作命令
3.5.1 sadd set1 1 1 1 2 2 2 3 3 3 新增
3.5.2 smembers set1 查看
3.5.3 sismember set1 4 判断元素是否在集合中,存在返回1,不存在返回0
3.5.4 srem set1 4 删除元素
3.5.5 scard set1 统计有多少元素
3.5.6 srandmember set1 [n] 随机取出n个数字,不改变集合
3.5.7 spop set1 [n] 随机弹出n个元素,弹出的元素会从集合中删除
场景:抽奖
3.5.8 smove set1 set2 2 将set1中的元素2移动到set2中(剪切)
3.5.9 sdiff set3 set4 属于set3不属于set4的元素构成的集合 差集
3.5.10 sunion set3 set4 并集
3.5.11 sinter set3 set4 交集
场景:共同好友
3.5.12 sintercard 2 set3 set4 limit1 取两个集合的交集的基数,基数就是个数,limit 表示输出个数的限制
场景:共同好友人数
3.6 zset(有序集合 sorted set)类型操作命令
3.6.1 zadd zset1 1 v1 2 v2 4 v4 3 v3
zadd key score1 v1 score2 v2 此有序集合会根据score来排序
3.6.2 zrange zset1 0 2 withscores 获取元素及score
3.6.3 zrevrange zset1 0 -1 withscores 倒叙获取元素及score
3.6.4 zrangebyscore zset1 (2 6 withscores limit 0 2
(代表不包含score为2的元素,limit类似mysql的分页
3.6.5 zscore zset1 v4 获取元素的分数
3.6.6 zrem zset1 v5 删除元素
3.6.7 zincrby zset1 6 v1 给v1元素的score加6
3.6.8 zcount zset1 2 7 获取指定分数范围内的元素个数
3.6.9 zmpop 1 zset1 min count 2 从一个有序集合中弹出两个score最小的元素
3.6.10 zrank zset2 v2 获取元素的下标
3.6.11 zrevrank zset1 v2 获取元素的倒序下标
3.6.12 场景应用
3.7 bitmap(位图)类型操作命令
3.7.1 定义
场景:签到、状态记录
3.7.2 setbit bitmap1 1 1 给指定key的值的第offset赋值val,val只能是0或1
签到:
setbit sign:user1:202301 1 1 用户user1在1月1号签到了
setbit sign:user1:202301 3 1 用户user1在1月3号签到了
结果:统计出有两天签到了
3.7.3 getbit key offset 获取key第offset位的值
3.7.4 strlen bitmap1 统计占用了多少字节数
3.7.5 bitcount bitmap1 返回bitmap中值为1的数量
3.7.6 bitop operation destkey key 对不同的二进制存储数据进行位运算(and、or、not、xor)
bitop and bitmap1 20230101 20230102:将20230101 20230102两个key进行位and运算,得到仍为1的位,然后将结果放入目标keybitmap1中,用bitcount bitmap1来计数有多少为1的位。
场景:统计20230101 20230102两天连续签到的人数
3.8 HyperLoglog(基数统计)类型操作命令
3.8.1 场景 HyperLoglog 返回的不是具体的元素,而是基数估算值
3.8.2 HyperLoglog定义
3.8.3 基数统计定义 集合去重后的元素个数
3.8.4 pfadd hll1 1 3 4 5 7 9 添加元素到HyperLoglog
3.8.5 pfcount hll1 返回HyperLoglog类型key的基数估算值
3.8.6 pfmerge destkey-hll3 hll1 hll2 将多个HyperLoglog合并为一个
3.8.7 HyperLoglog类型是string
3.9 GEO类型操作命令
3.9.1 geo(geology,地质)简介
3.9.2 GEO的类型是zset
3.9.3 如果显示乱码用此命令启动redis-cli:redis-cli -a 111111 -p 6379 --raw 2>/dev/dull
3.9.4 geoadd 多个精度(longitude)、纬度(latitude)、位置名称(member)添加到指定的key中
3.9.5 geopos xuzhou daxuelu ximatai 返回城市位置的坐标
3.9.6 geohash 返回一个一个或多个位置元素的geohash表示