Redis安装使用
使用docker部署redis
docker run --name myredis -dp 6379:6379 \
-v /path/to/your/local/data:/data \
-v /path/to/your/local/redis.conf:/usr/local/etc/redis/redis.conf \
redis
开启远程连接
redis不建议开启远程访问,一般是在内网访问
在redis.conf中加入如下配置。
bind 0.0.0.0
requirepass 密码
时区配置
redis时区不正确时,可通过如下配置设置为上海时区。
# 进入docker
docker exec -it redis bash
# 修改时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Redis数据类型
string(字符串): 基本的数据存储单元,可以存储字符串、整数或者浮点数。
hash(哈希):一个键值对集合,可以存储多个字段。
list(列表):一个简单的列表,可以存储一系列的字符串元素。
set(集合):一个无序集合,可以存储不重复的字符串元素。
zset(sorted set:有序集合): 类似于集合,但是每个元素都有一个分数(score)与之关联。
位图(Bitmaps):基于字符串类型,可以对每个位进行操作。
超日志(HyperLogLogs):用于基数统计,可以估算集合中的唯一元素数量。
地理空间(Geospatial):用于存储地理位置信息。
发布/订阅(Pub/Sub):一种消息通信模式,允许客户端订阅消息通道,并接收发布到该通道的消息。
流(Streams):用于消息队列和日志存储,支持消息的持久化和时间排序。
模块(Modules):Redis 支持动态加载模块,可以扩展 Redis 的功能
Redis常用命令
一些redis的常用命令,并不是全部
连接管理
服务器管理
操作实例
# 将数据库由0切换为1
redis-windows:0>select 1
"OK"
redis-windows:1>
键操作
操作实例
# 创建一个值为字符串的键值对
redis-windows:1>set expire_key hahahaha
"OK"
# 设置过期时间为20s
redis-windows:1>expire expire_key 20
"1"
# 查看过期时间
redis-windows:1>ttl expire_key
"16"
# 过期后查看,键值对被删除
redis-windows:1>get expire_key
null
字符串操作
实例
redis命令大小写不敏感
# 新增一个键值对
redis-windows:0>set hello world
"OK"
redis-windows:0>get hello
"world"
# 查看指定键值的类型
redis-windows:1>type hello
"string"
# 根据键修改值
redis-windows:0>set hello loster
"OK"
redis-windows:0>get hello
"loster"
# 修改指定键的名称
redis-windows:1>rename hello sayHi
"OK"
redis-windows:1>get sayHi
"loster"
# 删除一个字符串的,1代表true (操作成功)
redis-windows:0>del hello
"1"
redis-windows:0>get hello
null
redis-windows:1>set num 1
"OK"
# 给指定键的值加1(仅可对整数操作)
redis-windows:1>incr num
"2"
# 获取多个键的值
redis-windows:1>mget sayHi num
1) "loster"
2) "2"
列表操作
列表(list)的元素可以重复,Redis的列表基于双向链表实现,这意味着在头部和尾部的删除和插入操作是高效的,适用于队列和栈(在头部和尾部操作的数据结构)等场景
操作实例
# 创建一个列表,并从头依次插入1 2 3,返回列表的长度为3
redis-windows:1>lpush arr 1 2 3
"3"
# 查看列表指定范围的元素,0 -1 表示查看所有的元素
redis-windows:1>lrange arr 0 -1
1) "3"
2) "2"
3) "1"
# 从尾部依次插入4 5 6,返回列表的长度为6
redis-windows:1>rpush arr 4 5 6
"6"
redis-windows:1>lrange arr 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
5) "5"
6) "6"
# 移除列表第一项,并返回其值
redis-windows:1>lpop arr
"3"
# 移除列表最后一项,并返回其值
redis-windows:1>rpop arr
"6"
# 查看列表所有元素
redis-windows:1>lrange arr 0 -1
1) "2"
2) "1"
3) "4"
4) "5"
# 删除列表(清空列表)
redis-windows:1>del arr
"1"
redis-windows:1>lrange arr 0 -1
集合操作
集合(set)的元素不可以重复,且无序的(插入和获取时的顺序不一样),Redis的集合是基于哈希表实现的,因此增删改查的效率都较高。
操作实例
# 创建一个名为set_test的集合,并存入1 2 3。返回的是列表长度
redis-windows:0>sadd set_test 3 2 1 1 2 3
"3"
# 查看集合所有成员,可见集合是不重复且无序的
redis-windows:0>smembers set_test
1) "1"
2) "2"
3) "3"
# 删除集合set_test的1
redis-windows:0>srem set_test 1
"1"
redis-windows:0>smembers set_test
1) "2"
2) "3"
# 判断1是否为set_test的成员,0代表不是,1代表是
redis-windows:0>sismember set_test 1
"0"
redis-windows:0>sismember set_test 2
"1"
有序集合操作
操作实例
redis-windows:0>zadd zset 0 mysql 1 redis 3 monogodb
"3"
# 分数越小越在前面
redis-windows:0>zrange zset 0 -1 withscores
1) "mysql"
2) "0"
3) "redis"
4) "1"
5) "monogodb"
6) "3"
# 新加入如分数跟原来的相同,会排在原来的后面
redis-windows:0>zrange zset 0 -1 withscores
1) "mysql"
2) "0"
3) "postgreSql"
4) "0"
5) "redis"
6) "1"
7) "monogodb"
8) "3"
# 删除postgreSql这个成员
redis-windows:0>zrem zset postgreSql
"1"
redis-windows:0>zrange zset 0 -1 withscores
1) "mysql"
2) "0"
3) "redis"
4) "1"
5) "monogodb"
6) "3"
哈希
操作实例
# 给hashtable的设置两个字段name,age
redis-windows:0>hset hashtable name loster age 19
"2"
redis-windows:0>hget hashtable name
"loster"
# 获取age的值
redis-windows:0>hget hashtable age
"19"
# 批量获取值
redis-windows:0>hmget hashtable age name
1) "19"
2) "loster"
# 删除age
redis-windows:0>hdel hashtable age
"1"
# 获取所有的字段和值
redis-windows:0>hgetall hashtable
1) "name"
2) "loster"
redis哈希表数据结构
上面例子的结构可以抽象为如下的结构,看起来更直观一点
hashtable:{
name:'loster',
age:'19'
}