redis学习笔记(一)

redis基本概念

  1. 简介
    redis全称remote dictionary server,即远程字典服务器,是一个高性能的KV分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库。
  2. 特点
  • redis支持数据的持久化,即把数据保存到磁盘中
  • redis不止支持KV数据类型,还支持list、set、zset、hash等数据结构的存储
  • redis支持数据的备份,即主从复制模式的数据备份
  1. redis作用
  • 内存存储和持久化:redis支持异步将内存数据写到硬盘
  • 模拟类似于httpsession的功能
  • 发布、订阅消息系统
  • 定时器、计数器
  • 可以做数据库、缓存、消息中间件MQ
  1. 其他
  • redis默认有16个数据库,默认使用第0
  • redis是单线程的,6.0版本后已支持多线程
    • 不过在6.0版本后已经支持多线程,只有超级大厂才有需要,不然一般单线程的QPS(11万次/s)已经足够支撑大部分公司的需求

    • redis是基于内存运行的,而且是使用c语言写的,比较贴近计算机的底层,也因此速度很快

    • cpu不是redis的瓶颈,redis的瓶颈是机器内存、网络带宽

redis基本操作

  • 进入redis
    • cd /usr/local/bin
    • redis-server + 配置文件
    • redis-cli -h localhost -p 6379
    • 如果使用ping指令不报错则成功
      报错Please check the Redis logs for details about the RDB error.可执行一遍config set stop-writes-on-bgsave-error no
  • 退出
    • shutdown
    • exit

部分常用公共指令

更加全面详细的指令可上官网 查看

功能指令
切换数据库select {index}
查看当前数据库大小dbsize
查看当前数据库所有的keykeys *
清除当前数据库所有数据flushdb
清除所有数据库所有数据flushall

redis五大数据类型

String

String中常用的指令

功能指令备注
添加一个KVset key value
添加一个KV并指定有效时间setex key n valueset with expire
如果不存在key则插入valuesetnx key v返回1表示插入成功,返回0表示已存在key,不执行操作
获取对应key的valueget key
批量setmset k1 v1 k2 v2
msetnx 原子操作,一起成功或一起失败
批量getmget k1 k2
追加内容append key value不存在key则自动转为set k v
返回旧值,设置新值getset key value
查看对应value长度strlen key
判断是否存在keyexists key
把key移到别的数据库move key 1把key移到1号数据库,如果1号数据库已经有这个key,不会覆盖value值
删除keydel key
查看key类型type key
设置key过期时间expire key 10设置10秒后key过期
查看key剩余时间ttl key
value++incr key
value += nincrby key n
value–decr key
value -= ndecrby key n
获取value部分字符串getrange key 0 5截取value下标0到下标5,左闭右闭
修改value指定位置字符串setrange key n xxset mykey myvalue
setrange mykey 1 xx
结果mxxalue

List

list数据类型相关的指令都是l开头

功能指令备注
将1个或多个值插入列表头部(左边)lpush key v1 v2
将1个或多个值插入列表尾部(右边)rpush key v1 v2
从列表头部(左边)弹出一个值lpop key
从列表尾部(右边)弹出一个值rpop key
获取多个数据lrange key 0 10是最后lpush进去的值
获取单个数据lindex key 0获取0号位置的值
返回列表长度llen key
删除列表中n个指定value的数据lrem key 5 hello删除列表中最左的5个hello
截取列表ltrim key 0 2列表只保留0-2的数据
列队列表尾数据放在新列表头rpoplpush source destination其他的组合不得行有点奇怪
更新列表对应位置的valuelset key 0 newVal把key列表的0号下标位置的值改为newVal,不存在下标值会报错
插入值linsert key before/after v newV在列表中的v处的前或后插入newV

Set

set基本都是s开头的指令

功能指令备注
往set添加valuesadd key v1 v2
查看set中的元素smembers key
判断某一元素是否在set中ismember key v1
获取当前元素个数scard key
删除指定元素srem key v1 v2
从set中随机挑选 n个数srandomnumber key n默认一个,可指定n个
随机移除set中的元素spop key
把set中的元素移到另一个setsmove set1 set2 v没有移到list之类的骚操作,只能是移到set
取set1对set2的差集sdiff set1 set2
取set1对set2的交集sinter set1 set2
取set1和set2的并集sunion set1 set2

Hash

同理hash相关指令多以h开头

hash数据类型可以理解为key下的多个KV(field value)吧,而且大多指令和String数据类型的kv形式差不多。

不过hash更适合对象的存储

个人理解如果不对大佬帮我指正一下哈哈哈哈

功能指令备注
添加数据hset key field value批量添加 hmset k f1 v1 f2 v2
取出数据hget key field批量取出 hmget k f1 f2
显示key下的所有field value对hgetall key只获取field hkeys key
只获取value hvals key
删除指定字段hdel key field
查看key下有多少个KVhlen key
判断是否存在某个k fhexists key field
value+=nhincrby key field n
value-=nhdecrby key field n

Zset(有序集合)

与set相比,zset 还要多指定一个score

功能指令备注
往zset添加数据zadd key score1 value1 scorer2 value2
查看zsetzrange key 0 -1反序输出 zrevrange key 0 -1
排序输出valuezrangebyscore key -inf infinf是无穷的意思
可在指令最后加上withscores 可显示出score和value
移除元素zrem key value
查看元素数量zcard key
查看score区间的元素个数zcount key 0 5

三种特殊数据类型

Geospatial 地理位置

  • geoadd
#geoadd添加地理位置
# geoadd key 经度 纬度 value
geoadd china:city 116.40 39.90 beijin
  • geopos
#获取key的经度纬度
geopos key value
geopos china:city beijin
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
  • geodist
#计算两地直线距离
geodist china:city beijin shanghai km #不写km默认是m
"1067.3788"
  • georadius
# 查找指定经纬度半径多少内的元素
georadius china:city 110 30 10000 km
1) "shanghai"
2) "beijin"
# 可指定显示出元素距离,经纬度,元素个数
georadius china:city 110 30 10000 km withdist withcoord count 1
1) 1) "shanghai"
   2) "1105.9098"
   3) 1) "121.47000163793563843"
      2) "31.22999903975783553"
  • georadiusbymember
# 用法与georadius一样,只不过由自己指定的经纬度改为指定一个元素
georadiusbymember china:city beijin 10000 km
1) "shanghai"
2) "beijin"

  • geohash
# 把二维的经纬度转为一维的字符串
geohash china:city beijin
1) "wx4fbxxfke0"
  • geospatial其实是基于set的
# 查看、删除元素可以用set的指令
127.0.0.1:6379> ZRANGE china:city 0 -1
1) "shanghai"
2) "beijin"
127.0.0.1:6379> zrem china:city shanghai
(integer) 1

Hyperloglog

可以用来做基数统计

127.0.0.1:6379> pfadd k1 a b c d e # 添加一组数据
(integer) 1
127.0.0.1:6379> pfcount k1  # 统计个数
(integer) 5
127.0.0.1:6379> pfadd k2 c d e f g
(integer) 1
127.0.0.1:6379> pfcount k2
(integer) 5
127.0.0.1:6379> pfmerge k3 k1 k2  # 合并两组数据
OK
127.0.0.1:6379> pfcount k3
(integer) 7

Bitmap

可用于统计一个只有两种状态的信息(打卡、未打卡,登录、未登录)

127.0.0.1:6379> setbit b 0 0 #存数据
(integer) 0
127.0.0.1:6379> getbit b 0 #取数据
(integer) 0
127.0.0.1:6379> bitcount b #统计一个key中1的个数
(integer) 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值