redis安装与基本使用
一、redis在Ubuntu中的安装
1、sudo apt install redis或sudo apt install redis-server
2、将/etc/redis/redis.conf文件移动到一个自主目录中(目的是为了后续集群的部署,也方便对配置文件修改出错时能够重新配置)
例如:我放置在了/root/yjnconfig目录中
3、修改一些配置信息:
将移动后的配置文件打开,修改如下配置信息
文章图片
文章图片
3、执行命令 redis-server /root/yjnconfig/redis.conf 以开启我们复制后的redis
4、执行redis-cli 以打开客户端
在客户端中使用ping命令测试连通性,返回PONG即为正常
文章图片
5、还可以使用ps -ef|grep redis命令查看是否启动成功
文章图片
6、退出时在redis-cli中输入shutdown,接着输入exit退出
文章图片
此时,可以看到进程中已经没有了redis
文章图片
7、使用redis-benchmark进行压力测试
文章图片
二、redis常用命令
1、select [num] 选择号码为num的数据库(共16个数据库,从0开始)
例 select 1
文章图片
2、set [name] [value] 设置一个字段名为[name],值为[value]
例 set name alpaca 设置一个字段名为name,值为alpaca
文章图片
3、get [name] 获取字段名为[name]的值
例 get name
文章图片
4、exists [name] 判断字段[name]是否存在
例 exists name
文章图片
5、keys * 列出当前数据库所有字段
文章图片
6、move [name] 1 将当前数据库中的字段name移动到数据库1中
文章图片
7、expire [name] [second] 设置name字段的过期时间为second秒
文章图片
8、使用 ttl [name] 查看字段剩余的时间,-2代表没了
文章图片
9、使用type [name]查看字段类型
文章图片
10、清空数据库
flushdb:清空当前数据库
flushall:清空所有数据库
三、redis基本类型
1、String
使用场景:计数器、统计多单位数量[name]:[id]:[field]、粉丝数、对象缓存存储
(1)append [name] "string" 追加在name字段后一个值
文章图片
(2)strlen [name] 获取字段值长度
文章图片
(3)incr [name] 字段值自增1 (用于统计文章阅读量)
文章图片
(4)decr [name] 字段值自减1
文章图片
(5)支持步长的自增自减
文章图片
(6)字符串截取 getrange [name] [start] [end] start和end均包含
文章图片
(7)获取全部的字符串 getrange [name] [start] [end] end为-1
文章图片
(8)字符串替换 setrange [name] [start] [value]
文章图片
(9)setex [name] [second] [value] 设置过期的时间
文章图片
(10) setnx [name] [value] 如果不存在该字段才进行赋值 (常用于分布式锁)
文章图片
(11) mset ([name] [value] ……) 批量赋值
(12) mget ([name] ……) 批量获取值
文章图片
(13) msetnx ([name] [value] ……) 在不存在的情况下批量赋值
只有都不存在时才会执行成功,如果一部分存在 一部分不存在则执行失败 (原子性操作)
文章图片
(14) 对象
set user:1 {name:zhangsan,age:3} 设置一个user:1 对象 值为json字符来保存对象
文章图片
文章图片
更巧妙的设计 [name]:[id]:[field]
mset user:1:name zhangsan user:1:age 2
mget user:1:name user:1:age
文章图片
(15) getset [name] [value] 组合命令:先get再set,返回值为set之前的值
文章图片
2、List
- List是一个链表,可以在结点的左右侧插入值
- 如果key不存在,会创建新链表
- 如果key存在,则会新增内容
- 空链表代表不存在
- 在两边插入或者改动值效率最高
(2)lrange [name] [start] [length] 取长度为length的所有值,从栈顶开始
文章图片
(3)rpush [name] [value] 将value数据从右侧压入栈
文章图片
(4)lpop [name] 左出栈
(5)rpop [name] 右出栈
文章图片
(6) lindex [name] [index] 用下标获取数据
文章图片
(7) llen [name] 获取列表长度
文章图片
(8) lrem [name] [num] [value] 移除name列表中num个为value的元素,如果在多个相同元素中只移出一个,则被移除的顺序是从左到右
文章图片
(9)ltrim [name] [start] [end] 截取start到end之间的shujv,其他数据移出
文章图片
(10)rpoplpush [source] [destination] 将原列表从右侧弹出有一个数据放在一个新列表的左侧
文章图片
(11)lset [name] [start] [value] 当列表存在时,使用lset在指定位置设置元素
文章图片
(12)插入:linsert [name] before|after [pivot] [value] 在某一个基准前或后插入值
文章图片
3、set
set值不能重复
应用:
- 共同关注的好友
- 共同爱好
文章图片
(2)smembers [name] 获取全部值
文章图片
(3)sismember [name] [value] 查看元素是否存在
文章图片
(4)scard [name] 获取set集合元素的个数
文章图片
(5)srem [name] [value] 移除指定元素
文章图片
(6)srandmember [name] [num] 随机抽取num个数据
文章图片
(7)spop [name] 随机移除一个元素
文章图片
(8)smove [source] [destination] [value] 将source集合中的元素value移动到destination集合
文章图片
(9)差集sdiff 交集sinter 并集sunion
文章图片
4、Hash
map集合
- 适合数据进程变动
- 适合存储对象
(2)hget [集合名] [键] (hmget [集合名] [键])
文章图片
(3)hgetall [name] 获取所有键值对
文章图片
(4)hdel [name] [key] 删除一个map
文章图片
(5)hlen [name] 获取长度
文章图片
(6)hexists [name] [key] 判断是否存在
文章图片
(7)只获取key或value
文章图片
(8)设置自增 不存在时设置值
文章图片
5、Zset有序集合
按照权重排序
- 班级成绩表
- 工资表
- 普通消息、重要消息(带权重)
- 排行榜
文章图片
(2)zrangebyscore [name] [最小值] [最大值]
文章图片
文章图片
(3)zrange [name] [start] [end] zrevrange
文章图片
(4)zrem [name] [member] 移除有序集合中的指定元素
文章图片
(5)zcard [name] 获取长度
文章图片
(6)zcount [name] [start] [end] 统计满足区间值的个数
文章图片
6、geospatical 地理位置
实现原理是ZSet集合,因此可以使用ZSet的命令来操作,比如Zrange Zrem
用途:
- 两地距离
- 附近的人
文章图片
(2)geopos 获取指定城市的经纬度
文章图片
(3)geodist 计算两个城市的直线距离
文章图片
(4)georadius 以给定经纬度为中心,找出某一半径内的元素
110 30 模拟自身经纬度 1000为半径 km为单位
附近的人
文章图片
(5)georadiusbymember 根据城市定位找到周边城市
文章图片
(6)geohash 返回城市的经纬度的字符串表示(11位)
文章图片
7、Hyperloglog 网站访问量计算(有错误率)
如果追求无误,可以使用set或自定义数据结构
基数
A {1,3,5,7,8,7}
B {1,3,5,7,8}
基数:不重复的元素 = 5 可以接受误差
文章图片
8、Bitmaps
位存储
- 统计疫情感染人数
- 统计用户信息
- 打卡
- 活跃度
- 登陆情况
比如:记录周一到周日的打卡
周一0 打卡
周二1 未打卡
周三2 未打卡
...
文章图片
查看某一天是否打卡
【redis安装与基本使用】
文章图片
统计打卡的天数
文章图片
欢迎指出错误和不足~
转载请注明出处!
本篇发布在以下博客或网站:
双鱼座羊驼 - 知乎 (zhihu.com)
pisces365的博客_CSDN博客
双鱼座羊驼 - SegmentFault 思否
双鱼座羊驼 的个人主页 - 动态 - 掘金 (juejin.cn)
双鱼座羊驼 - 博客园 (cnblogs.com)
推荐阅读
- Redis|redis原理之布隆过滤器(Bloom Filter)
- java|图解四种 IO 模型
- Redis|Redis性能解析--Redis为什么那么快()
- java|你跳一次涨多少(今天见识到跳槽天花板!!)
- java|送你一份大厂都这么解决Redis缓存问题,面试官必问!
- (免费领取红包封面)【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知
- redis优化(bigkey、hotkey)
- redis高可用(主从、哨兵、集群)
- 【Redis 系列】redis 学习四,set 集合,hash 哈希,zset 有序集合初步认知