2022-02-22(周二)
dos系统: win+r 输入cmd 回车
在 C:users个人账户>
盘符名: d: e:
cd 目录名
mkdir 目录名
dir
dos下查看ip地址: ipconfig
nosql: 数据的存储方式为: key/value 键/值对
如: name 马经涛 age 19 sex 女
mongodb: key:value 键:值 name:张三
redis: 远程字典服务,开源的,跨平台的.非关系型数据库, 存储数据格式为key-value格式.
redis是基于内存.
redis 的特点:
1. redis将数据库完全存储在内存中
2. redis有相对丰富的数据类型
3. redis可以很容易将数据复制任意数量的从机中
4. redis是纯内存操作, 是已知性能最快的 key-value数据库
redis和mysql 的区别:
1. mysql是关系型数据库, 更偏向于存储持久化数据
2. redis是非关系型数据库, 更偏向于读取数据
安装与启动redis:
1. 解压redis压缩包到d盘或e盘根目录
2. 通过dos命令进入到 redis解压后的文件夹中
3. 启动redis服务
dos---> redis-server.exe redis.windows.conf
redis端口号为: 6379
4. 连接redis服务
再开打一个新的dos窗口,
dos ---> cd切换到redis目录下
redis-cli.exe (cli ====> client客户端)
127.0.0.1:6379> 代表连接成功
输入ping, 得到PONG提示, 代表连接redis服务成功.
连接成功后, redis自带16个数据库 (0-15)
select 0 切换到0数据库中 redis中select等价于mysql中的use
切换库: select 库名
redis数据库的增删改查操作(*)
1. set key value 创建/新增 键值对
set 键 值
2. get key 获取自定key的值
get 键
127.0.0.1:6379> set name "tom"OK127.0.0.1:6379> set age 18OK127.0.0.1:6379> get name"tom"127.0.0.1:6379> get age"18"
3. set key value 更新指定key的value值, key已存在
4. del key 删除指定的key
127.0.0.1:6379> set name "xiaowang"OK127.0.0.1:6379> get name"xiaowang"127.0.0.1:6379> del name(integer) 1127.0.0.1:6379> get name(nil)
注意:
1.redis中 key是不允许重复的.
2. 如果key已存在,则set时, 语句为更新指定key的值
3. 删除key后, 重新获取则提示 为(nil)空.
redis keys命令 ---> key 键
- exists 键名 判断key是否存在
- type 键名 查看key的数据类型
- 字符模板 查看与字符模板相关的键 *代表所有
127.0.0.1:6379> exists name(integer) 0127.0.0.1:6379> exists age(integer) 1127.0.0.1:6379> type agestring127.0.0.1:6379> type namenone127.0.0.1:6379> set dept testingOK127.0.0.1:6379> type deptstring127.0.0.1:6379> set phone 1111OK127.0.0.1:6379> set name zhangsanOK127.0.0.1:6379> set sex nanOK127.0.0.1:6379> keys *1) "dept"2) "name"3) "phone"4) "age"5) "sex"127.0.0.1:6379> keys *n*1) "name"2) "phone"
redis中的数据, 是无序的.
4. randomkey 随机返回一个存在 key
5. dbsize 统计当前库中的key的个数
127.0.0.1:6379> randomkey"name"127.0.0.1:6379> dbsize(integer) 5
6. expire key 时间 设置key的活动时间(单位: 秒s)
7. ttl key 获取一个key的活动时间
设置活动时间到期后, key自动销毁, 通过keys * 查不到已过期的key
127.0.0.1:6379> expire name 30(integer) 1127.0.0.1:6379> ttl name(integer) 1127.0.0.1:6379> ttl name(integer) -2127.0.0.1:6379> keys *1) "phone"2) "age"3) "sex"127.0.0.1:6379> set name lisiOK127.0.0.1:6379> get name"lisi"
8. rename 旧键名 新键名 对key进行重命名
9. move 键 库名 移动当前库中指定的key到指定库中
127.0.0.1:6379> rename name snameOK127.0.0.1:6379> move age 1(integer) 1127.0.0.1:6379> keys *1) "phone"2) "sname"3) "sex"127.0.0.1:6379> select 1OK127.0.0.1:6379[1]> keys *1) "age"127.0.0.1:6379[1]> get age"18"
10. flushdb 删除当前库中的所有key
11. flushall 删除所有库中的所有key
12. set key value ex 时间 创建键值对时, 给key设置活动时间
13. exit 退出客户端
127.0.0.1:6379> set name lisi ex 100OK127.0.0.1:6379> ttl name(integer) -2
redis中的数据类型: 字符串 string; 列表 list; 集合 set; 哈希 hash; 有序集合 zset
字符串类型: redis中的基础数据类型
提供的操作:
set key value
get key
1. 同时添加多个键值对
mset key1 value1 key2 value2...
2. 同时获取多个key的值
mget key1 key2 ...
127.0.0.1:6379> mset name lisi age 18 sex nan phone 13333 address xian score 60OK127.0.0.1:6379> keys *1) "name"2) "address"3) "score"4) "phone"5) "age"6) "sex"127.0.0.1:6379> mget name sex address1) "lisi"2) "nan"3) "xian"
3. getset key 新value 先获取key原有的数据, 再更新新的value
127.0.0.1:6379> getset name zhangsan"lisi"127.0.0.1:6379> get name"zhangsan"
4. setnx key value 添加键值对, 如果key存在则什么都不做;
key不存在,则成功创建键值对
127.0.0.1:6379> setnx name wangwu(integer) 0
5. msetnx key1 value1 key2 value2 ...
同时添加多组键值对, 如果key存在, 则什么都不做;
key不存在,则成功添加多组键值对
127.0.0.1:6379> msetnx name xioawu bankid 11111(integer) 0127.0.0.1:6379> msetnx bank zhaoshang bankid 1111(integer) 1
6. setex key 时间 value 修改key的值并设定key的活动时间
127.0.0.1:6379> setex abc 20 456OK127.0.0.1:6379> ttl abc(integer) 17127.0.0.1:6379> ttl abc(integer) 15127.0.0.1:6379> ttl abc(integer) 15127.0.0.1:6379> get abc"456"
==================================================================================================================================================
2022-02-23(周二)
今日内容:
字符串 string
1. incr 给指定key的value值 +1
2. decr 给指定key的value值 -1
3. incrby key 数值 给key值增加指定的数值
--- 给age 键的value值 + 10 incrby age 10
4. decrby key 数值 给key值减去指定的数值
--- 给age 键的value值 - 10 decrby age 10
5. append key 追加的value 追加新的值到原value数据后
例: append name ing
6. strlen key 获取指定key的value长度
7. substr key 开始下标 结束下标 截取字符串
substr name 3 7 下标=位置-1
127.0.0.1:6379> append name ing(integer) 11127.0.0.1:6379> strlen name(integer) 11127.0.0.1:6379> get name"zhangsaning"127.0.0.1:6379> substr name 0 7"zhangsan"
8. setrange key 下标 value 得到一个新的值(对原有的value值进行了修改)
从指定的下标开始进行修改
127.0.0.1:6379> get name"zhangsaning"127.0.0.1:6379> substr name 5 7"san"127.0.0.1:6379> setrange name 5 liu(integer) 11127.0.0.1:6379> get name"zhangliuing"
9. getrange key 开始下标 结束下标 截取字符串
127.0.0.1:6379> getrange name 5 7"liu"127.0.0.1:6379> substr name 5 7"liu"
List 列表
按照拆入的顺序排序, 可以添加一个元素到列表的头部或者尾部.
1. lpush 列表名(key) value1 value2 value3... 从列表的头部开始插入数据
2. rpush 列表名(key) value1 value2 value3... 从列表的尾部开始插入数据
3. llen 列表 返回列表的长度 len ==== length
4. lrange 列表名(key) 开始下标 结束下标
lrange 列表名(key) 0 -1 -1默认为最后一个数据的下标
5. lindex 列表名 下标 查看指定列表中 对应下标位置的 数据
127.0.0.1:6379> lindex db 4"sqlserver"127.0.0.1:6379> lindex db 3"mysql"
6. lset 列表名 下标 值 将指定列表中 指定下标的值 替换为新的数据
127.0.0.1:6379> lrange db 0 -1 1) "odps" 2) "sqllite3" 3) "oracle" 4) "mysql" 5) "sqlserver" 6) "a1" 7) "a2" 8) "o1" 127.0.0.1:6379> lset db 7 s1OK127.0.0.1:6379> lrange db 0 -1 1) "odps" 2) "sqllite3" 3) "oracle" 4) "mysql" 5) "sqlserver" 6) "a1" 7) "a2" 8) "s1"
7. lpop 列表名 用于删除列表头部第一个数据
8. rpop 列表名 删除列表尾部最后一个数据
9. lrem 列表名 数量 值 删除列表中指定数量的值 rem === remove
练习: 创建一个成绩列表 score:
在列表左侧插入数据 59 70 65 30 90 55 80 100
在列表的右侧插入数据 72 80 30 65 65
查看列表下标为3的数据是哪个数据
删除列表中 3个65数据
删除列表头部第一个数据
查看列表下标2-10的所有数据
查看列表中的所有数据
统计列表中数据的个数
127.0.0.1:6379> del score(integer) 1127.0.0.1:6379> lpush score 59 70 65 30 90 55 80 100(integer) 8127.0.0.1:6379> rpush score 72 80 30 65 65(integer) 13127.0.0.1:6379> lindex score 3"90"127.0.0.1:6379> lrem score 3 65(integer) 3127.0.0.1:6379> lpop score"100"127.0.0.1:6379> lrange score 2 101) "90"2) "30"3) "70"4) "59"5) "72"6) "80"7) "30"127.0.0.1:6379> lrange score 0 -11) "80"2) "55"3) "90"4) "30"5) "70"6) "59"7) "72"8) "80"9) "30"127.0.0.1:6379> llen score(integer) 9
列表名也是 key, 所以字符串的相关操作对于列表名来说 是通用的.
比如: 查看key的个数 keys *
删除 key: del key名(列表名)
查看类型: type key名 type socre ===> list
10. linsert 列表名 before 指定元素 新的值
linsert 列表名 after 指定元素 新的值
在列表中指定的元素前/元素后插入一个新的值
127.0.0.1:6379> linsert score before 30 40(integer) 10127.0.0.1:6379> lrange score 0 -1 1) "80" 2) "55" 3) "90" 4) "40" 5) "30" 6) "70" 7) "59" 8) "72" 9) "80"10) "30"127.0.0.1:6379> linsert score after 72 71(integer) 11127.0.0.1:6379> lrange score 0 -1 1) "80" 2) "55" 3) "90" 4) "40" 5) "30" 6) "70" 7) "59" 8) "72" 9) "71"10) "80"11) "30"
11. 列表截取操作 ltrim 列表名 开始下标 结束的下标
从开始下标截取数据到结束下标 , 截取后重新赋值给列表.
不在开始下标与结束下标之间的数据会被删除.
127.0.0.1:6379> lrange score 0 -1 1) "80" 2) "55" 3) "90" 4) "40" 5) "30" 6) "70" 7) "59" 8) "72" 9) "71"10) "80"11) "30"127.0.0.1:6379> ltrim score 2 6OK127.0.0.1:6379> lrange score 0 -11) "90"2) "40"3) "30"4) "70"5) "59"
set 集合
在redis中, 集合中的数据 无序, 且具有唯一性(不重复).
1. sadd 集合名(key) value1 value2... 向集合中插入数据
2. srem 集合名(key) value 删除集合中指定的数据
3. smembers 集合名(key) 查看集合中的数据
127.0.0.1:6379[6]> sadd score 80(integer) 1127.0.0.1:6379[6]> sadd score 70 90(integer) 2127.0.0.1:6379[6]> srem score 80(integer) 1127.0.0.1:6379[6]> smembers score1) "70"2) "90"
4. spop 集合名(key) 随机从指定的集合中删除一个数据
5. smove 原集合 目标集合 数据
从原集合中移动数据到目标集合中, 相当于剪切操作.
127.0.0.1:6379[6]> smembers score1) "80"2) "59"3) "90"4) "75"5) "60"6) "88"7) "lisi"127.0.0.1:6379[6]> smove score course 88(integer) 1127.0.0.1:6379[6]> smembers course1) "88"2) "100"127.0.0.1:6379[6]> smembers score1) "80"2) "59"3) "90"4) "75"5) "60"6) "lisi"
6. scard 集合名 统计指定集合中数据的个数
127.0.0.1:6379[6]> scard score(integer) 6
7. 交集: 两个集合共有的数据
并集: 两个集合的数据进行相加合并(相同的数据只保留一份)
差集: 两个集合除共有的部分外的其它数据
a. sinter 集合1 集合2 求两个集合的交集(共有的数据)
b. sinterstore 新集合名 集合1 集合2 求两个集合的交集(共有的数据),并将交集的数据保存到新集合中
127.0.0.1:6379[6]> sinter score course1) "59"2) "60"127.0.0.1:6379[6]> sinterstore s1 score course(integer) 2127.0.0.1:6379[6]> keys *1) "s1"2) "course"3) "score"127.0.0.1:6379[6]> smembers s11) "59"2) "60"
c. sunion 集合1 集合2 求两个集合的并集 (将两个集合中的数据合并去重)
d. sunionstore 新集合名 集合1 集合2 求集合1与集合2的并集,并将并集数据保存到新的集合中.
127.0.0.1:6379[6]> sunion course score1) "80"2) "59"3) "77"4) "100"5) "90"6) "75"7) "60"8) "88"9) "lisi"127.0.0.1:6379[6]> sunionstore a2 score course(integer) 9127.0.0.1:6379[6]> smembers a21) "80"2) "59"3) "77"4) "90"5) "75"6) "60"7) "88"8) "lisi"9) "100"
e. sdiff 集合1 集合2 求集合1在集合2除共有的数据外的其它数据
f. sdiffstore 新集合名 集合1 集合2 求集合1在集合2除共有的数据外的其它数据,保存差集数据到新集合中
127.0.0.1:6379[6]> sdiffstore a3 score course(integer) 4127.0.0.1:6379[6]> smembers a31) "80"2) "lisi"3) "90"4) "75"127.0.0.1:6379[6]> sdiffstore a4 course score(integer) 3127.0.0.1:6379[6]> smembers a41) "77"2) "88"3) "100"
8. sismember 集合名 数据 检查数据是否在集合中存在
127.0.0.1:6379[6]> sismember score lisi(integer) 1127.0.0.1:6379[6]> sismember score wangwu(integer) 0
9. srandmember 集合名 随机返回集合中一个元素
127.0.0.1:6379[6]> srandmember score"60"127.0.0.1:6379[6]> srandmember score"80"127.0.0.1:6379[6]> srandmember score"lisi"127.0.0.1:6379[6]> srandmember score"90"127.0.0.1:6379[6]> srandmember score"80"



