Redis 基础
Redis( Remote Dictionary Server)是用C语言开发的一个开源的高性能键值对(key-value)数据库
持续更新…
应用场景简单描述,如图:
Redis特征:
- 数据之间没有必然联系
- 内部采用单线程机制进行工作
- 高性能并发
- 多数据类型支持
- 持久化支持
Redis安装
对于Windows系统,可以按照如下步骤来进行开发:
下载完毕后来到相应目录下,双击启动redis-serve.exe:
·
再双击启动客户端redis-cli.exe即可:
对于Linux系统,依次执行以下命令来进行安装:
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar -zvxf redis-6.0.8.tar.gz
sudo mv [当前下载路径] /usr/local/bin
cd /usr/local/bin
make
cd src
./redis-server
抑或直接通过Docker命令直接部署(挂载卷):
mkdir -p /home/yiyexingchen/DockerFile/Redis/conf
mkdir -p /home/yiyexingchen/DockerFile/Redis/data
touch /home/yiyexingchen/DockerFile/Redis/conf/redis.conf
docker run -itd -v /home/yiyexingchen/DockerFile/Redis/conf/redis.conf:/etc/redis/redis.conf -v /home/yiyexingchen/DockerFile/Redis/data:/data -p 6666:6379 reids
基本指令
- set 命令 创建
- get 命令 获取
- clear命令 清屏
- help命令 帮助
- quit/exit命令 退出
- select 切换数据库
#set [key] [value]
set name redis
#get [key]
get name
get age # 不存在的键
大致演示:
常用数据存储类型
- string
- hash
- list
- set
- sorted_set
string类型
keys * 查看所有键
exists 判断键是否存在 exists key
set 创建 set key value
unlink 非阻塞删除(仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作中) unlink key
get 获取 get key
del 删除 del key
expire 为key设置生命周期 expire key seconde
ttl 通过键查看剩余生命周期(-1表示永不过期,-2代表已经过期) ttl key
mset 批量创建 mset key1 value1 key2 value2 ...
mget 批量获取 mget key1,key2 ...
strlen 获取值的长度 strlen key
append 追加 append key vlaue
incr 自增(需要是数值,默认自增为1) incr key
decr 自减(需要是数值,默认自减为1)decr key
incrby 自增(需要是数值,自增量为increment,不可以为小数)incrby key increment
decrby 自增(需要是数值,自减量为increment,不可以为小数) decrby key increment
incrbyfloat 自增(需要是数值,自增量为increment,可以为小数)incrbyfloat key increment
setex 设置数据的指定存活周期setex key seconds value
psetex 设置数据的指定存活周期psetex key millisecond value
hash类型
hset 创建 hset key field value
hget 获取 hget key field
hgetall 获取所有键值对 hgetall key
hdel 删除特定属性 hdel key field1 field2 ...
hmset 批量创建 hset key field1 value1 field2 value2 ...
hmget 批量获取 hget key field1 field2 ...
hlen 获取哈希表中的字段的数量 hlen key
hsetnx 创建新的键值对,如果已经存在,则创建失败 hsetnx key field value
hexists 获取哈希表中是否存在指定的字段 hexists key field
hkeys 获取哈希表中的所有字段名 hkeys key
hvals 获取哈希表中的所有字段值 hvals key
hincrby 指定字段数值增加某一整数数值 hincrby key filed increment
hincrbyfloat 指定字段数值增加某一小数数值 hincrbyfloat key filed increment
list类型(底层使用双向链表)
lpush 向左添加数据 lpush key value1 value2 ...
rpush 向左添加数据 rpush key value1 value2 ...
lrange 向左获取一段范围的数据 lrange key start stop
lindex 向左获取某索引的数据 lindex key index
llen 长度 llen key
lpop 向左弹出首元素 lpop key
rpop 向右弹出首元素 rpop key
blpop 如果为空,向左等待规定时间弹出首元素 blpop key timeout
brpop 如果为空,向右等待规定时间弹出首元素 brpop key timeout
lrem 删除指定元素值count个数元素(从左往右的计数) lrem key count value
set类型
sadd 添加 sadd key member1 member2 ...
smembers 获取所有数据 smembers key
srem 删除 srem key memeber1 member2 ...
scard 获取数据总量 scard key
sismember 判断是否为集合成员 key member
srandmember 随机获取集合中指定数量的元素 srandmember key count
spop 随机获取集合中指定个数的数据并将这些数据移除集合 spop key count
sinter 求两个集合的交集 sinter key1 key2
sunion 求两个集合的并集 sunion key1 key2
sdiff 求两个集合(有方向)作差集 sdiff key1 key2
sinterstore 求两个集合的交集并将结果保存到新集合中 sinterstore destination key1 key2
sunionstore 求两个集合的并集并将结果保存到新集合中 sunionstore destination key1 key2
sdiffstore 求两个集合的差集并将结果保存到新集合中 sdiffstore destination key1 key2
smove 将源数据中的元素移动至目标集合中 smove source distination member
sorted_set类型
zadd 添加数据 zadd key score1 member1 socre2 member2 ...
zrange 获取数据 zrange key start stop [withscore(可选项:输出score)]
zrevrange 获取逆序数据 zrevrange start stop [withscore(可选项:输出score)]
zrem 删除数据 zrem key member1 member2 ...
zrangebyscore 查询指定score范围(闭集)的元素 zrangebyscore key min max [withscore]
zrevrangebyscore 查询指定score范围(闭集)的元素逆序 zrevrangebyscore key min max [withscore]
zremrangebyrank 删除指定排行范围的元素 zremrangerank key start stop
zremrangebyscore 删除指定分数范围的元素 zremrangescore key min max
zcard 获取集合元素个数 zcard key
zcount 获取对应范围元素个数 zcount key min max
zinterstore 集合交集并将数据存储到新的集合中(这里元素的score会作相加操作) zinterstore destination numkeys(集合个数) key1 key2 ...
zunionstore 集合并集将数据存储到新的集合中(这里元素的score会作相加操作) zunionstore destination numkeys(集合个数) key1 key2 ...
zrank 获取数据对应索引 zrank key member
zrevrank 获取数据对应逆序索引 zrevrank key member
zscore score获取 zscore key member
zincryby score修改 zincryby key increment member
Redis可视化工具
如下为一款免费开源的Redis可视化工具,支持LInux,Windows,Mac多平台:
应用场景描述
如基本的登陆场景,服务端采用Nginx负载均衡技术,此时用户的session不能很好地共享,因为不能保证这个session在下次访问的服务器上一定存在。
解决的方案如下:
- 存储到客户端cookie中: 安全性不足
- session复制:重复的数据冗余,浪费了大量的存储空间
- 使用redis:当用户第一次访问服务器时,将此时的用户session存储的redis数据库中,再次访问首先查询redis数据库
Redis发布和订阅
什么是发布和订阅?
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息
Redis客户端可以订阅任意数量的频道
建立两个Redis客户端
其中的客户端执行如下命令:
subscribe channel # 订阅者订阅频道为channel
再在另一个客户端执行以下命令:
publish channel Hello # 发布者通过频道channel发布消息'Hello'
Jedis的简单使用
Jedis 是 Redis 官方首选的 Java 客户端开发包(关系同JDBC与MySQL的关系… )
事先一般