使用本地redis 步骤 本地redis启动
1--安装与开启服务:
下载地址: https://github.com/MSOpenTech/redis/releases
Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。
打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis(刚刚自己解压的那个目录里面)
运行 redis-server.exe redis.windows.conf 。
如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。
切换目录:cd D:\Redis
开启服务:redis-server.exe redis.windows.conf
截图如下:
此时将开启的命令窗口处于开启状态,打开另一个cmd命令窗口进行操作:不然无法访问服务端了:
新命令窗口:
进入redis目录: cd D:\Redis
运行命令: redis-cli.exe -h 127.0.0.1 -p 6379
截图如下:
2--redis命令操作:
登录口:6379, 默认使用ip :127.0.0.1
操作数据:redis具备五种数据类型 String Hash List Set Zset
String类型(包含基础命令):
1 2 3 4 5 6 7 8 9 10 11 | keys * :查看当前redis节点(启动的每一个redis服务都叫redis节点。)所有已存在的key值。 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> set name hanlaoshi OK 127.0.0.1:6379> set location beijing OK 127.0.0.1:6379> keys * 1) "location" 2) "name" 127.0.0.1:6379> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | set key value:存储一个key-value结构的数据(String),覆盖一个同名key值得数据 127.0.0.1:6379> set age 22 OK 127.0.0.1:6379> keys * 1) "location" 2) "age" 3) "name" 127.0.0.1:6379> get age "22" 127.0.0.1:6379> set age 33 OK 127.0.0.1:6379> get age "33" 127.0.0.1:6379> get key:获取当前key对应的value数据 127.0.0.1:6379> get age "22" 127.0.0.1:6379> set age 33 OK 127.0.0.1:6379> get age "33" 127.0.0.1:6379> select 整数:redis中默认存在16个数据分库(database),index号0-15,在一个服务器节点上,可以区分多种类型,多种功能的数据库仓库,默认登录的是0号分库(现在使用不多) 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> keys * (empty list or set) 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> keys * 1) "location" 2) "age" 3) "name" 127.0.0.1:6379> exists key:判断当前节点是否包含key的数据。 get也可以完成这个任务。redis在key-value结构的value存储容量是512M。使用get判断存在会先读在判断数据是否为空,浪费资源 127.0.0.1:6379> exists haha kaka age (integer) 1 127.0.0.1:6379> exists age (integer) 1 127.0.0.1:6379> exists haha (integer) 0 127.0.0.1:6379> del key:删除key值对应的key-value数据; 127.0.0.1:6379> del age (integer) 1 127.0.0.1:6379> del haha (integer) 0 127.0.0.1:6379> keys * 1) "location" 2) "name" 127.0.0.1:6379> type key:查看当前key的类型 127.0.0.1:6379> type name string 127.0.0.1:6379> help 命令名称:一般到官网查询详细讲解;按照案例 save:将当前的内存数据保存到磁盘文件(根目录dump.rdb) 127.0.0.1:6379> keys * 1) "location" 2) "name" 127.0.0.1:6379> save OK 127.0.0.1:6379> save前,save后观察redis根目录的dump.rdb大小可以发现已经存储到持久化文件---大小会发生变化 flushall:将当前redis所有数据清洗,包括持久化文件,内存数据(创建集群的时候使用) 127.0.0.1:6379> keys * 1) "location" 2) "name" 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> set name wanglaoshi OK 127.0.0.1:6379[1]> set age 11 OK 127.0.0.1:6379[1]> keys * 1) "age" 2) "name" 127.0.0.1:6379[1]> save OK 127.0.0.1:6379[1]> flushall OK 127.0.0.1:6379[1]> keys * (empty list or set) 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> flushdb:清空一个分库的数据,不删除持久化文件内容(进行测试使用) 127.0.0.1:6379[1]> flushdb OK 127.0.0.1:6379[1]> keys * (empty list or set) 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> keys ( (empty list or set) 127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> redis中string字符串如果是纯数字,也有一些简单的数字操作命令 incr decr key:自增1,自减1;计步器 127.0.0.1:6379> set num 100 OK 127.0.0.1:6379> incr num (integer) 101 127.0.0.1:6379> decr num (integer) 100 127.0.0.1:6379> 多步计步器:incrby decrby key 整数:对key的value数字自增自减去整数步数 127.0.0.1:6379> incrby num 10 (integer) 110 127.0.0.1:6379> decrby num 10 (integer) 100 127.0.0.1:6379> mset mget:批量操作(不支持多节点分布式,只能对本节点数据进行处理)(测试时确定当前节点拥有的数据) 127.0.0.1:6379> mset num1 200 num2 300 num3 400 OK 127.0.0.1:6379> keys * 1) "num3" 2) "name" 3) "num" 4) "100" 5) "num1" 6) "num2" 127.0.0.1:6379> mget num1 num2 num3 1) "200" 2) "300" 3) "400" 127.0.0.1:6379> LRU (lasted recent unused)自动删除策略:如果redis内存达到自动删除启动瓶颈 Last Recent Unused最近最久未使用key expire key:对key添加超时过期的设定 配合ttl key可以查看 key值剩余时间,已经超时的内容删除,ttl剩余时间是-2 -1表示永久数据 127.0.0.1:6379> ttl num1 (integer) -2 127.0.0.1:6379> keys * 1) "num3" 2) "name" 3) "num" 4) "100" 5) "num2" 127.0.0.1:6379> ttl name (integer) -1 127.0.0.1:6379> append key value :对key对应的value进行追加数据操作; |
Hash数据类型:
对应value为hash结构的数据都是面向对象的数据结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | hset key field value:key 是 相当于变量名,filed是value中的key-value对中的key,但是面向对象时表示一个对象的属性名称, value表示属性的值 127.0.0.1:6379> hset user username hanlaoshi (integer) 1 127.0.0.1:6379> hset user age 18 (integer) 1 127.0.0.1:6379> hset user location beijing (integer) 1 127.0.0.1:6379> type user hash 127.0.0.1:6379> hget key field 127.0.0.1:6379> hget user username "hanlaoshi" 127.0.0.1:6379> hexists key field:判断hash类型中的属性值是否存在 127.0.0.1:6379> hexists user haha (integer) 0 127.0.0.1:6379> hexists user age (integer) 1 127.0.0.1:6379> hmset和hmget:批量设置,不支持分布式 127.0.0.1:6379> hmset student age 19 name wangxiaoxiao gender male OK 127.0.0.1:6379> hmget student age name gender 1) "19" 2) "wangxiaoxiao" 3) "male" 127.0.0.1:6379> Hdel key field:删除属性和值 127.0.0.1:6379> hdel student age (integer) 1 127.0.0.1:6379> hget student age (nil) 127.0.0.1:6379> |
Hkeys Hvals:单独获取对象的属性名,或者属性的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 127.0.0.1:6379> hkeys user 1) "name" 2) "username" 3) "age" 4) "location" 127.0.0.1:6379> hvals user 1) "haha" 2) "hanlaoshi" 3) "18" 4) "beijing" 127.0.0.1:6379> Hlen key:获取属性个数(长度) 127.0.0.1:6379> hlen user (integer) 4 127.0.0.1:6379> hlen student (integer) 2 127.0.0.1:6379> Hincreby:和String类型特性区别的一个体现 String对应存储对象数据:需要在redis中修改对象某个属性的数值(10-15) {“id”:1623125, "age" :10,“name”: "hanlaoshi" } 不能直接在redis中获取age将10变成15, 从redis读出来,转化成对象,对象set属性,重新放回redis 和hash存储对象数据 user id 1623125 age 10 name hanlaoshi Hincreby user name 5 |
List链表数据结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | list01--{“200”, "300" , "400" } 查看链表list和设置链表数据Lpush(左表示上,右表示下) lpush key value [vlaues]:对于一个链表,从左(上)开始插入数据; lrange key 起始下标 结束下标(展示范围,结束下标是-1表示到尾部) 127.0.0.1:6379> lpush mylist01 100 200 300 (integer) 3 127.0.0.1:6379> lrange mylist 0 1 (empty list or set) 127.0.0.1:6379> lrange mylist01 0 1 1) "300" 2) "200" 127.0.0.1:6379> Rpush key value:从下向上插入数据 127.0.0.1:6379> rpush mylist01 400 (integer) 4 127.0.0.1:6379> lrange mylist01 0 -1 1) "300" 2) "200" 3) "100" 4) "400" 127.0.0.1:6379> Linsert:从链表中间操作数据,从左侧找到第一个相同元素插入数据(before after) linsert mylist01 before 100 one 在mylist01链表中,找到100这个元素,从前插入数据one 300 200 one 100 400 127.0.0.1:6379> linsert mylist01 before 100 one (integer) 5 127.0.0.1:6379> lrange mylist01 0 -1 1) "300" 2) "200" 3) "one" 4) "100" 5) "400" 127.0.0.1:6379> lpush mylist01 100 (integer) 6 127.0.0.1:6379> lrange mylist01 0 -1 1) "100" 2) "300" 3) "200" 4) "one" 5) "100" 6) "400" 127.0.0.1:6379> linsert mylist01 after 100 two (integer) 7 127.0.0.1:6379> lrange mylist01 0 -1 1) "100" 2) "two" 3) "300" 4) "200" 5) "one" 6) "100" 7) "400" 127.0.0.1:6379> lset key index value将下标对应的数据修改,将指定索引下标对应的值改为指定的值 127.0.0.1:6379> lset mylist01 1 2 OK 127.0.0.1:6379> lrange mylist01 0 -1 1) "100" 2) "2" 3) "300" 4) "200" 5) "one" 6) "100" 7) "400" 127.0.0.1:6379> Lrem:这个没有rrem,内部逻辑涉及到了从下往上删除 lrem key count value:从左向右寻找count个value相同值元素删除。 count>0从左往右删 count=0 全删 count<0从右往左删 127.0.0.1:6379> lpush mylist01 200 200 200 (integer) 9 127.0.0.1:6379> lrange mylist01 0 -1 1) "200" 2) "200" 3) "200" 4) "2" 5) "300" 6) "200" 7) "one" 8) "100" 9) "400" 127.0.0.1:6379> lrem mylist01 -2 200 (integer) 2 127.0.0.1:6379> lrange mylist01 0 -1 1) "200" 2) "200" 3) "2" 4) "300" 5) "one" 6) "100" 7) "400" 127.0.0.1:6379> lrem mylist01 0 200 (integer) 2 127.0.0.1:6379> ltrim 保留链表的范围内的数据元素 ltrim key 起始位置 结束位置(-1表示到尾部) 127.0.0.1:6379> ltrim mylist01 4 6 OK 127.0.0.1:6379> lrange mylist01 0 -1 1) "400" 127.0.0.1:6379> 两个链表的数据交互 lpop 从list头部删除元素,返回删除结果(类似remove) 秒杀逻辑,可以利用list对象实现阻止超卖现象 127.0.0.1:6379> lrange mylist01 0 -1 1) "six" 2) "five" 3) "four" 4) "three" 5) "two" 6) "one" 7) "400" 127.0.0.1:6379> lpop mylist01 "six" 127.0.0.1:6379> lrange mylist01 0 -1 1) "five" 2) "four" 3) "three" 4) "two" 5) "one" 6) "400" 127.0.0.1:6379> rpoplpush:从第一个list的尾部删除数据,移动到第二个list的头部添加 127.0.0.1:6379> rpoplpush mylist01 mylist02 "400" 127.0.0.1:6379> lrange mylist02 0 -1 1) "400" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗