redis介绍
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可
基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的
开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis 大事件
2009 揭秘创始人创建Redis背后的故事 https://www.sohu.com/a/403189647_590700
2020.6 Redis 创始人宣布退居二线:我写代码只是为了表达自己!
https://zhuanlan.zhihu.com/p/155645360
redis能做什么?
- 内存存储,持久化,断电即丢失,所以持久化很重要,redis采用两种机制(RDB和AOF)
- 效率高,可以用于高速缓存
- 发布订阅系统
- 地图信息分析
- 计数器等,网站浏览量
redis特点/特性 - 多样的数据类型
- 持久化
- 集群
- 事务等…
安装
升级版本gcc因为redis7.* 需要gcc高版本的支持
可以通过gcc -v 检查版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#修改使用版本 scl enable devtoolset-9 bash echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
redis安装
1.gcc -v
2.echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
3.gcc -v
4.cd /opt
5.将安装包放至/opt
6.tar -zxvf 安装包名
7.cd redis-7.0.5
8.make
9.make install
10.cd redis-7.0.5
11. ./redis-server
基本操作
启动服务 redis-server redis6379.conf
停止服务 redis-cli shutdown
退出客户端 exit
连接redis
redis-cli
redis-cli --raw (转化中文格式)
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6379 --raw
String
查询所有Key(测试使用)
keys *
添加key
set key value
setex key 超时时间 value 添加key并设置超时时间
setnx key value 如果不存在 默认会创建一个新的值,存在不操作
mset key value [key value ...] 批量存储
对象添加
set 对象名 {属性1:值;属性2:值;属性3:值}
(注意:字符串需要去掉引号)
保存数据
bgsave
查看key
get key
mget key1 key2 ... 批量查看
*占多个匹配 keys m*
? 占一个匹配 keys n?me
[az] 当前必须符合a或者z n[az]me
[^a] 不匹配什么
[a-c] 匹配范围
删除单个key
del key
删除所有Key
flushdb 删除当前库
flushall 删除所有库
切换数据库
select 0~15
浮点数增删
incrbyfloat 5/-0.5
设置key超时时间
expire key 超时时间(秒)
ttl 查看key过期时间
追加字符串 append key value
获取key指定范围值 getrange key index1(开始下表) index2(结束下标 -1表示最大长度)
替换key指定位置值 setrange key 开始下标 替换内容
List列表类型
list
添加list列表
lpush listname zhangsan lisi
list列表取值
lrange listname 0 -1 #取值
list追加数据
lpush listname wangwu #追加值
list结尾插入值
rpush listname zhaoliu # 结尾插入值
list获取当前列表长度
llen listname # 获取当前列表长度
删除list
del key #这种是直接将整个列表都删除 del删除删除任意类型
删除list列表中的某一些数据
# 没给count值,默认左弹出(删除)第一个值 返回的信息是弹出(删除)的值
lpop listname
# count 提供值,可以弹出多个,返回值就是弹出的值得列表
lpop listname 10
删除指定值
lrem key count value ---- 默认从左侧开始查询并删除
(删除几个什么值)
例:lrem listname 2 zhangsan---删除两个zhangsan
通过索引获取数据
lindex listname 1(下标)
截取范围的数据(下标)
ltrim listname 1 4
替换列表中的值(下标)
lset listname 1 zhaoliu
在指定的一个位置前面插入值(不是索引)
linsert stu before zhaoliu lisi
在指定的一个位置后面插入值(不是索引)
linsert stu after lisi wangwu
set
特点: 无序、不能重复 所有命令 s 开头
用途:点赞,签到,like等功能、抽奖功能
重复的值无法添加成功,并且值得顺序也不是固定的
添加值
sadd key v........
查询值
smembers key
删除指定指定的元素
srem key value
判断当前集合中是否存在指定的值
sismember key v 是返回1 否返回0
查看当前集合中值个数
sacrd key 返回个数
随机获取
srandmember key count(要返回的个数)
随机删除
spop key count
差集 diff 差异 只返回第一个集合的差值
例:
127.0.0.1:6379> sadd zb1 xiaozhi dasima caixukun lijiaqi
4
127.0.0.1:6379> sadd zb2 liziqi xiaozhi dasima wangdaxian xuxubaobao
5
127.0.0.1:6379> sdiff zb1 zb2
caixukun
lijiaqi
交集 sinter 交集
127.0.0.1:6379> sinter zb2 zb1
dasima
xiaozhi
Hash类型(map结构)
key-value(map) 比较适合对象类型的数据存储 key -(key-value)
存值 (key (key - value))
语法:
hset key k1 v1 k2 v2 k3 v3
获取单个值
hget key k
存储对象
hset student name zhangsan age 19 hobbies chouyanhejiutangtou
存储对象集合
hset student 1 {id:1,name:zhangsan} 2 {id:2,name:lisi}
获取 hget student 2
获取多个key
hmget student 1 2
获取全部的值 hgetall 名称k
hgetall student
通过值的key删除指定的数据
hdel student 2
读取当前hash表(map集合)中数据的个数
hlen student
判断是否存在
hexists student 10 (存在返回1.无则返回0)
读取所有的key ----- 1w条数据 取某一些特定的数据,取到所有key 循环 取值 判断 筛选。
hkeys student
取所有的value --- 案例:Java中想将redis中的hash结构转化为set结构
hvals student
Zset
有序不重复集合,在set的基础上多增加一个值 set k1 * v1 (zset k1 排序的值(score) v1)
有序不可重复的set集合
主要使用方向:工资、班级成绩等等之类的数据。 或者 权重处理 0 普通 1 重要
增加数据
zadd key 权重值 value
(例:8000) (例:{id:1,name:zhangsan,sal:8000})
查询数据
zrange key 0 -1 (默认升序)
随机读取
zrandmember key 1(随机获取的个数)
删除数据
zrem key value
###复杂查询###
显示所有信息,从小到大 (范围) -inf 负无穷 +inf正无穷
语法:zrange by score key min max --- min max使用的是排序字段的值
升序操作
默认取所有数据
zrange key 0 -1 取索引的范围
根据当前排序结果取所有数据
zrangebyscore key -inf +inf
根据当前排序结果取所有数据 并显示排序字段
zrangebyscore key -inf +inf withscores
根据当前排序结果取所有数据 并显示排序字段 并截取某一部分值
zrangebyscore key -inf +inf withscores limit 0 1
取排序字段值大于**的数据
zrangebyscore key **(例:8000) +inf
取排序字段值小于**的数据
zrangebyscore key -inf **(例:8000)
降序操作
默认取所有数据
zrevrange key 0 -1 取索引的范围
##其余同升序操作,zrange更换为zrevrange##
geospatial 地理位置
作用:朋友圈定位,附近的人,打车距离计算。
添加地理位置信息 GEOADD
geoadd key 经度 纬度 地址名称
查询指定位置的经纬度 GEOPOS
geopos maps 地址名称
查询两地点之间的距离 GEODIST
geodist key 地点1 地点2 单位(默认 米)
例: geodist maps xuejiaao hongyun M
查询附近的城市(定位) GEORADIUS
georadius key 经度 纬度 范围(例:1500) 距离单位 (注:范围与单位之间需要用空格隔开)
例:georadius maps 116.22518499110029 39.951383565611934 1500 KM
查询附近的城市(定位)--显示到中间的距离 GEORADIUS
georadius key 经度 纬度 范围 距离单位 withdist
查询附近的城市(定位)--显示他人精准信息 GEORADIUS
georadius maps 经度 纬度 范围 距离单位 withdist withcoord
查询附近的城市(定位)--显示他人精准信息 并指定返回个数 GEORADIUS
georadius maps 经度 纬度 范围 距离单位 withdist withcoord count 返回个数
通过元素(非坐标)定位信息(即通过名称)
georadiusbymember key 名称 范围 距离单位
Bitmaps位图
案例:是否打卡(一周) 0 未打卡 1 打卡
增加数据
setbit key1 key2 value
例:
setbit kq 1 1
考勤 周几 是否打卡 1:是 0:否
查看某一天的打卡记录 getbit
get kq
统计打卡的天数 bitcount
bitcount kq
扩展
setbit kq:geng:2023:3 6 1
考勤:谁的:年:月 日 是否打卡