redis安装与基本使用
文章目录
- redis安装与基本使用
- 一、redis在Ubuntu中的安装
- 二、redis常用命令
- 三、redis基本类型
- 1、String
- 2、List
- 3、set
- 4、Hash
- 5、Zset有序集合
- 6、geospatical 地理位置
- 7、Hyperloglog 网站访问量计算(有错误率)
- 8、Bitmaps
一、redis在Ubuntu中的安装
1、sudo apt install redis或sudo apt install redis-server
2、将/etc/redis/redis.conf文件移动到一个自主目录中(目的是为了后续集群的部署,也方便对配置文件修改出错时能够重新配置)
例如:我放置在了/root/yjnconfig目录中
3、修改一些配置信息:
将移动后的配置文件打开,修改如下配置信息
![image-20220208210019926](https://img-blog.csdnimg.cn/img_convert/22b6e1758caec0826073d3f81d7b7e4e.png)
![image-20220208210107531](https://img-blog.csdnimg.cn/img_convert/41c1086d834a45fcefe906d354866e1b.png)
3、执行命令 redis-server /root/yjnconfig/redis.conf 以开启我们复制后的redis
4、执行redis-cli 以打开客户端
在客户端中使用ping命令测试连通性,返回PONG即为正常
![image-20220208210315241](https://img-blog.csdnimg.cn/img_convert/2123e4e06711a5f544a0c76282a72129.png)
5、还可以使用ps -ef|grep redis命令查看是否启动成功
![image-20220208210440930](https://img-blog.csdnimg.cn/img_convert/a894cf890713cafff16fd717b86d9b21.png)
6、退出时在redis-cli中输入shutdown,接着输入exit退出
![image-20220208210526555](https://img-blog.csdnimg.cn/img_convert/dc922175c53c69bc6bcae11eee7e87a7.png)
此时,可以看到进程中已经没有了redis
![image-20220208210611546](https://img-blog.csdnimg.cn/img_convert/9d02ecbc162eeee0ebe9829f083c41ad.png)
7、使用redis-benchmark进行压力测试
![image-20220208210814705](https://img-blog.csdnimg.cn/img_convert/7c6cd877574bc5bc183fc774fc25d8c4.png)
二、redis常用命令
1、select [num] 选择号码为num的数据库(共16个数据库,从0开始)
例 select 1
![image-20220208204856568](https://img-blog.csdnimg.cn/img_convert/4c2ff60dccb9489f3a2294cf7f50258a.png)
2、set [name] [value] 设置一个字段名为[name],值为[value]
例 set name alpaca 设置一个字段名为name,值为alpaca
![image-20220208205110883](https://img-blog.csdnimg.cn/img_convert/36069a26cc4d8dc839e3277c7ae5f661.png)
3、get [name] 获取字段名为[name]的值
例 get name
![image-20220208205236181](https://img-blog.csdnimg.cn/img_convert/e61c9a4e60b0bf2698fd2a6bfcd3264b.png)
4、exists [name] 判断字段[name]是否存在
例 exists name
![image-20220208205321520](https://img-blog.csdnimg.cn/img_convert/eaaaf84b1eac0ba51eb76963decabf78.png)
5、keys * 列出当前数据库所有字段
![image-20220208205409917](https://img-blog.csdnimg.cn/img_convert/4c29a243098753605dd4da8cbd2165dd.png)
6、move [name] 1 将当前数据库中的字段name移动到数据库1中
![image-20220208205448877](https://img-blog.csdnimg.cn/img_convert/af7d81fc62c134eaae7c39f79a648325.png)
7、expire [name] [second] 设置name字段的过期时间为second秒
![image-20220208211311970](https://img-blog.csdnimg.cn/img_convert/bf93b19bc1135d31901df4b1bb4839ee.png)
8、使用 ttl [name] 查看字段剩余的时间,-2代表没了
![image-20220208211415723](https://img-blog.csdnimg.cn/img_convert/0ff3e722ff4b4fcf4372897e92cc84a4.png)
9、使用type [name]查看字段类型
![image-20220208212239117](https://img-blog.csdnimg.cn/img_convert/233e232b45f7817488760348e9f00686.png)
10、清空数据库
flushdb:清空当前数据库
flushall:清空所有数据库
三、redis基本类型
1、String
使用场景:计数器、统计多单位数量[name]:[id]:[field]、粉丝数、对象缓存存储
(1)append [name] “string” 追加在name字段后一个值
![image-20220208223038287](https://img-blog.csdnimg.cn/img_convert/ed9528ba0888a5777a2de1d35eb844a7.png)
(2)strlen [name] 获取字段值长度
![image-20220208223258721](https://img-blog.csdnimg.cn/img_convert/579c45a1f72418fddacb8bd7699f51c8.png)
(3)incr [name] 字段值自增1 (用于统计文章阅读量)
![image-20220208223714123](https://img-blog.csdnimg.cn/img_convert/25bc8bf648bd8d2a3eed922571c1f32b.png)
(4)decr [name] 字段值自减1
![image-20220208223758625](https://img-blog.csdnimg.cn/img_convert/89bda615752cf41dc6e14482eef40aa1.png)
(5)支持步长的自增自减
![image-20220208224012361](https://img-blog.csdnimg.cn/img_convert/af4c281d683038267c1c4d80b1f4ec14.png)
(6)字符串截取 getrange [name] [start] [end] start和end均包含
![image-20220208224754215](https://img-blog.csdnimg.cn/img_convert/f4f7a6d0fb5e3aa686c01fc81f86ef93.png)
(7)获取全部的字符串 getrange [name] [start] [end] end为-1
![image-20220208224936561](https://img-blog.csdnimg.cn/img_convert/ca63c5124208d8cf616898838e3b92c0.png)
(8)字符串替换 setrange [name] [start] [value]
![image-20220208225308942](https://img-blog.csdnimg.cn/img_convert/4901df52970de963ad011b1592c9408a.png)
(9)setex [name] [second] [value] 设置过期的时间
![image-20220208230052961](https://img-blog.csdnimg.cn/img_convert/ac48492b9baa68e208aecd4df6707753.png)
(10) setnx [name] [value] 如果不存在该字段才进行赋值 (常用于分布式锁)
![image-20220208230135589](https://img-blog.csdnimg.cn/img_convert/21ffd7e60b77e60b14145f5f68637978.png)
(11) mset ([name] [value] ……) 批量赋值
(12) mget ([name] ……) 批量获取值
![image-20220208230705235](https://img-blog.csdnimg.cn/img_convert/1a570f4f86a41f8414ff4bafa060362f.png)
(13) msetnx ([name] [value] ……) 在不存在的情况下批量赋值
只有都不存在时才会执行成功,如果一部分存在 一部分不存在则执行失败 (原子性操作)
![image-20220208231023729](https://img-blog.csdnimg.cn/img_convert/ed12f8e7ee01c01a51466bedc407581e.png)
(14) 对象
set user:1 {name:zhangsan,age:3} 设置一个user:1 对象 值为json字符来保存对象
![image-20220208231958870](https://img-blog.csdnimg.cn/img_convert/d729c6438d087be86ccae4e83a64cffc.png)
![image-20220208232018048](https://img-blog.csdnimg.cn/img_convert/86680f72526c66dc9f7803f44029f6ff.png)
更巧妙的设计 [name]:[id]:[field]
mset user:1:name zhangsan user:1:age 2
mget user:1:name user:1:age
![image-20220208232042427](https://img-blog.csdnimg.cn/img_convert/4c7dcf7b31c3b7fb72b8b971380746e6.png)
(15) getset [name] [value] 组合命令:先get再set,返回值为set之前的值
![image-20220208232310463](https://img-blog.csdnimg.cn/img_convert/09c5f21f56db9459fe2254f7becafe8b.png)
2、List
-
List是一个链表,可以在结点的左右侧插入值
-
如果key不存在,会创建新链表
-
如果key存在,则会新增内容
-
空链表代表不存在
-
在两边插入或者改动值效率最高
(1)lpush [name] [value] 将value数据从左侧压入栈
(2)lrange [name] [start] [length] 取长度为length的所有值,从栈顶开始
![image-20220209094454709](https://img-blog.csdnimg.cn/img_convert/e6b596cfad9a08e969f9b5f5521bdbc2.png)
(3)rpush [name] [value] 将value数据从右侧压入栈
![image-20220209095037699](https://img-blog.csdnimg.cn/img_convert/8b9ff504a4460c1ae2b0d3bdf17fa65d.png)
(4)lpop [name] 左出栈
(5)rpop [name] 右出栈
![image-20220209095606845](https://img-blog.csdnimg.cn/img_convert/d6de32359c1626b70768409d3fc2a03a.png)
(6) lindex [name] [index] 用下标获取数据
![image-20220209100034400](https://img-blog.csdnimg.cn/img_convert/5651b28f65742f3b00fbe964bf154de5.png)
(7) llen [name] 获取列表长度
![image-20220209100232268](https://img-blog.csdnimg.cn/img_convert/3b9a66ada14c250ec493948dc3b0fe64.png)
(8) lrem [name] [num] [value] 移除name列表中num个为value的元素,如果在多个相同元素中只移出一个,则被移除的顺序是从左到右
![image-20220209100542206](https://img-blog.csdnimg.cn/img_convert/da685ebbf626454cba8a6e908caba3c9.png)
(9)ltrim [name] [start] [end] 截取start到end之间的shujv,其他数据移出
![image-20220209101615580](https://img-blog.csdnimg.cn/img_convert/7f05d7fbd33ec9c5b15152741436cabb.png)
(10)rpoplpush [source] [destination] 将原列表从右侧弹出有一个数据放在一个新列表的左侧
![image-20220209102115224](https://img-blog.csdnimg.cn/img_convert/674945dc13d3b13b99b7bf81867aac01.png)
(11)lset [name] [start] [value] 当列表存在时,使用lset在指定位置设置元素
![image-20220209102916262](https://img-blog.csdnimg.cn/img_convert/b6bf5d25f90071e4fdf98547e5e8c100.png)
(12)插入:linsert [name] before|after [pivot] [value] 在某一个基准前或后插入值
![image-20220209103630271](https://img-blog.csdnimg.cn/img_convert/934bf35e98e4df835d81ecf5b2f032a4.png)
3、set
set值不能重复
应用:
(1)sadd [name] [value] 添加值
![image-20220209110450960](https://img-blog.csdnimg.cn/img_convert/dfd590ce0a3d67596cdadab49d6c8365.png)
(2)smembers [name] 获取全部值
![image-20220209110539016](https://img-blog.csdnimg.cn/img_convert/a20d9f4a3be21cd24d032c2f54142993.png)
(3)sismember [name] [value] 查看元素是否存在
![image-20220209110619621](https://img-blog.csdnimg.cn/img_convert/ed1096c23e2471e79dde47fbdb880d59.png)
(4)scard [name] 获取set集合元素的个数
![image-20220209111134124](https://img-blog.csdnimg.cn/img_convert/683500918039ce50d7203988da5d94fc.png)
(5)srem [name] [value] 移除指定元素
![image-20220209111720322](https://img-blog.csdnimg.cn/img_convert/a96afb676b61f2b641a51bb5a4c1f045.png)
(6)srandmember [name] [num] 随机抽取num个数据
![image-20220209112136243](https://img-blog.csdnimg.cn/img_convert/8733ab95eeb813aacf0b6f4b20860b5d.png)
(7)spop [name] 随机移除一个元素
![image-20220209112731263](https://img-blog.csdnimg.cn/img_convert/5cfa722c1b4412e468cd74183feb1f7d.png)
(8)smove [source] [destination] [value] 将source集合中的元素value移动到destination集合
![image-20220209113056591](https://img-blog.csdnimg.cn/img_convert/8b804138435c56bf552092eaacd84cf5.png)
(9)差集sdiff 交集sinter 并集sunion
![image-20220209113524877](https://img-blog.csdnimg.cn/img_convert/c0613efdddbe24f1b963c5358eb11ad6.png)
4、Hash
map集合
(1)hset [集合名] [键] [值] (hmset [集合名] [键] [值])
(2)hget [集合名] [键] (hmget [集合名] [键])
![image-20220209115529566](https://img-blog.csdnimg.cn/img_convert/e8db1b242b7de155c31ee5d8ea4c8ecb.png)
(3)hgetall [name] 获取所有键值对
![image-20220209115918295](https://img-blog.csdnimg.cn/img_convert/d9d5cac07961fa724a6b901e094e7a97.png)
(4)hdel [name] [key] 删除一个map
![image-20220209120703791](https://img-blog.csdnimg.cn/img_convert/53cb505f8187cd514892fab8f8555c0a.png)
(5)hlen [name] 获取长度
![image-20220209120950105](https://img-blog.csdnimg.cn/img_convert/5073a6a981dfb4e79413ca2728291ac3.png)
(6)hexists [name] [key] 判断是否存在
![image-20220209121017314](https://img-blog.csdnimg.cn/img_convert/83cabf511d7d666a5e761bcf1c26d0fe.png)
(7)只获取key或value
![image-20220209121146610](https://img-blog.csdnimg.cn/img_convert/1335f69408d88f868ff5815d76047acb.png)
(8)设置自增 不存在时设置值
![image-20220209121559669](https://img-blog.csdnimg.cn/img_convert/4a61a32e57c259d2956f02512492533e.png)
5、Zset有序集合
按照权重排序
- 班级成绩表
- 工资表
- 普通消息、重要消息(带权重)
- 排行榜
(1)zadd [name] [score] [member]
![image-20220209141513964](https://img-blog.csdnimg.cn/img_convert/90479fd4cfda691a4b306e7c545c776a.png)
(2)zrangebyscore [name] [最小值] [最大值]
![image-20220209141718743](https://img-blog.csdnimg.cn/img_convert/e2e86279c92d1b73efb09c436bb6b050.png)
![image-20220209142426952](https://img-blog.csdnimg.cn/img_convert/c9ad426591c2158911cb3c722ff267c4.png)
(3)zrange [name] [start] [end] zrevrange
![image-20220209142221216](https://img-blog.csdnimg.cn/img_convert/02a1ee86f2bf23e0525d8bfebb941e6a.png)
(4)zrem [name] [member] 移除有序集合中的指定元素
![image-20220209143035420](https://img-blog.csdnimg.cn/img_convert/9d084a1d12274c25c9ef4c002f9366fb.png)
(5)zcard [name] 获取长度
![image-20220209143231108](https://img-blog.csdnimg.cn/img_convert/edc10af5a4e4ca70069c638d20c99bc4.png)
(6)zcount [name] [start] [end] 统计满足区间值的个数
![image-20220209143556828](https://img-blog.csdnimg.cn/img_convert/4655443698778f37d0af4034ba175aac.png)
6、geospatical 地理位置
实现原理是ZSet集合,因此可以使用ZSet的命令来操作,比如Zrange Zrem
用途:
(1)geoadd 名称 经度(-180,+180) 纬度(-85.05,+85.05) 名称
![image-20220209151539933](https://img-blog.csdnimg.cn/img_convert/e95d975e859a2149694c64926efec29f.png)
(2)geopos 获取指定城市的经纬度
![image-20220209152438173](https://img-blog.csdnimg.cn/img_convert/e8d56e94f5de908e3e7747bc588786d2.png)
(3)geodist 计算两个城市的直线距离
![image-20220209152712151](https://img-blog.csdnimg.cn/img_convert/8b11eef345137277741313c22e56e12a.png)
(4)georadius 以给定经纬度为中心,找出某一半径内的元素
110 30 模拟自身经纬度 1000为半径 km为单位
附近的人
![image-20220209153214371](https://img-blog.csdnimg.cn/img_convert/26556597abbb4c7c4fb9507664c27e51.png)
(5)georadiusbymember 根据城市定位找到周边城市
![image-20220209153751741](https://img-blog.csdnimg.cn/img_convert/9df05ab6c7c33347a2d827ba6be9ec66.png)
(6)geohash 返回城市的经纬度的字符串表示(11位)
![image-20220209154037296](https://img-blog.csdnimg.cn/img_convert/4d467353a5612fce1134515bf5e58617.png)
7、Hyperloglog 网站访问量计算(有错误率)
如果追求无误,可以使用set或自定义数据结构
基数
A {1,3,5,7,8,7}
B {1,3,5,7,8}
基数:不重复的元素 = 5 可以接受误差
![image-20220209155454284](https://img-blog.csdnimg.cn/img_convert/fca70246054f0f0fab13a3513c7a9fd2.png)
8、Bitmaps
位存储
365天 = 365bit 节省内存
比如:记录周一到周日的打卡
周一0 打卡
周二1 未打卡
周三2 未打卡
…
![image-20220209160208370](https://img-blog.csdnimg.cn/img_convert/ceaf24de0a8ccc7d0c06f2750511ad0c.png)
查看某一天是否打卡
![image-20220209160341047](https://img-blog.csdnimg.cn/img_convert/c00e5996986097fce4cb81d79d87c535.png)
统计打卡的天数
![image-20220209160419683](https://img-blog.csdnimg.cn/img_convert/4ae054a0f6e6523f4e78be856c942a4b.png)
欢迎指出错误和不足~
转载请注明出处!
本篇发布在以下博客或网站:
双鱼座羊驼 - 知乎 (zhihu.com)
pisces365的博客_CSDN博客
双鱼座羊驼 - SegmentFault 思否
双鱼座羊驼 的个人主页 - 动态 - 掘金 (juejin.cn)
双鱼座羊驼 - 博客园 (cnblogs.com)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)