Redis学习笔记
Redis是key-value(键值对)类型NoSQL(非关系型)数据库,它把原本存在硬盘上的数据转移到
内存中,利用内存的高性能来提高程序性能,同时也能持久化到硬盘;Redis常用于缓存,利用内存的高效提高程序的处理速度
特点
- 速度快
- 广泛语言的支持
- 持久化
- 多种数据结构
- 主从复制(多台redis服务器之间建立一种通讯的机制,可以让数据保持同步,无论连接哪一台服务器都可以提供相同的服务)
- 分布式与高可用
- 分布式:redis服务器可能会有多台,它并不要求强制放在同一个机房或局域网中,可能分布在全国各地彼此通过互联网进行通信,程序可以就近访问服务器,从而降低了网络传输所需要的时间
- 高可用:随时打开随时可用
启动&关闭
在redis根目录下执行
# 启动redis
./src/redis-server redis.conf
# 关闭redis
./src/redis-cli shutdown
# 连接192.168.2.100服务器端口为6379,密码为123456的redis
./src/redis-cli -h 192.168.2.100 -p 6379 -a 123456
# 设置了密码 关闭redis
# 先启动redis-cli客户端
./src/redis-cli -p 6380
# 输入密码
auth admin
# 关闭redis
shutdown
# 启动redis-cli客户端
./src/redis-cli
# 启动redis-cli客户端(改了默认端口的命令)
./src/redis-cli -p 6380
# 如果设置了 requirepass 启动redius-cli需要输入密码
auth admin
常用配置
配置项 | 示例 | 说明 |
---|
daemonize | daemonize yes | 是否启用后台运行,默认no |
port | port 6380 | 设置端口号,默认6379 |
logfile | logfile “redis.log” | 设置日志文件 |
databases | databases 255 | 设置redis数据库总量,默认16 |
dir | dir ./ | 设置数据文件存储目录 |
requirepass | requirepass admin | 设置使用密码 |
protected-mode | protected-mode yes | 是否开启保护模式,开启后只允许指定ip访问服务 |
bind | bind 0.0.0.0 | 代表所有ip的主机可以访问 |
数据类型
- String - 字符串类型(String最大512MB,建议单个kv不超过100KB)
- Hash - Hash类型(用于存储结构化数据)
- List - 列表类型(List列表就是一系列字符串的“数组”,按插入顺序排序;最大长度为2的32次方-1,可以包含40亿个元素)
- Set - 集合类型(是字符串的无序集合,集合成员是唯一的)
- Zset - 有序集合类型(是字符串的有序集合,集合成员是唯一的,比Set多了一个分数,以分数来进行排序)
通用命令
命令 | 示例 | 说明 |
---|
select | select 15 | 选择15号数据库 |
keys | keys na* | 根据Pattern表达式查询符合条件的key |
dbsize | dbsize | 返回key的总数 |
exists | exists name | 检查key=name是否存在 |
expire | expire name 30 | 设置key=hello在20秒后过期 |
ttl | ttl name | 查看key=name的过期剩余时间 |
type | type key | 返回key所存储的值的类型 |
del | del key | 当key存在时删除key |
字符串命令
命令 | 示例 | 说明 |
---|
get | get name | 获取key=name的值 |
set | set name mushan | 设置key=name的值为mushan |
mset | mset age 20 sex 男 | 设置多个值 age=20,sex=男 |
mget | mget age sex | 获取多个值 |
setex | setex address 1 JiangXi | 设置address,值为JiangXi,过期时间为1秒 |
setnx | setnx address JiangXi | 当address不存在时设置值为JiangXi |
del | del name | 删除key=name |
incr | incr age | key=age的值自增1 |
decr | decr age | key=age的值自减1 |
incrby | incr count 3 | key=count自增3 |
decrby | decr count 3 | key=count自减3 |
Hash命令
命令 | 示例 | 说明 |
---|
hget | hget emp:1 age | 获取hash中key=age的值 |
hset | hset emp:1 age 23 | 设置hash中age=23 |
hmset | hmset emp:1 age 30 name kaka | 设置hash多个值 |
hmget | hmget emp:1 age name | 获取hash多个值 |
hgetall | hgetall emp:1 | 获取hash所有值 |
hkeys | hekeys emp:1 | 获取所有字段 |
hvals | hvals emp:1 | 获取所有值 |
hdel | hdel emp:1 age | 删除user:1的age |
hexists | hexists emp:1 name | 检查是否存在 |
hlen | hlen emp:1 | 获取指定长度 |
List命令
命令 | 示例 | 说明 |
---|
rpush | rpush listkey c b a | 右侧插入 |
lpush | lpush listkey f e d | 左侧插入 |
rpop | rpop listkey | 右侧弹出并返回最后一个元素 |
lpop | lpop listkey | 左侧弹出并返回第一个元素 |
llen | llen listkey | 获取长度 |
lrange | lrange listkey 0 2 | 获取0-2的值 |
lrange | lrange listkey 0 -1 | 获取所有 |
drpop | drpop listkey 10 | 移除并返回最后一个元素,如果列表没有元素 会阻塞列表直到等待超时(10)秒或发现可弹出元素为止 |
Set命令
命令 | 示例 | 说明 |
---|
sadd | sadd set a | 设置key=set,值为a |
sadd | sadd set b c d | 设置key=set,值有b,c,d |
smembers | smembers set | 获取key=set的所有值 |
scard | scard set | 获取set集合的成员数 |
sinter | rpush set1 set2 | 获取两个集合中相同的元素(交集) |
sunion | sunion set1 set2 | 将两个set集合合并一起返回(并集) |
sdiff | sdiff set1 set2 | 返回set1有,set2没有的元素(差集) |
srem | srem set a | 移除集合中一个,或多个成员 |
ZSet命令
命令 | 示例 | 说明 |
---|
zadd | zadd zset 100 a | 设置key=set,分数为100(值越小排越前),值为a |
zadd | zadd zset 101 b 102 c 103 d | 设置key=set,值为b,c,d |
zrange | zrange zset 0 -1 | 返回zset集合所有元素 |
zrange | zrange zset 0 -1 withscores | 返回zset集合所有元素(打印分数) |
zrangebyscore | zrangebyscore zset 100 102 | 按分数来取zset分数100-102的值 |
zincrby | zincrby zset 20 a | 给指定成员加上分数,为20 |
zrem | zrem zset a | 移除有序集合中zset的a字段,可移除多个 |