栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

redis数据库一致性问题解决(5种常用非关系型数据库)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

redis数据库一致性问题解决(5种常用非关系型数据库)

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 键

  1.  exists  键名     判断key是否存在
  2.  type  键名     查看key的数据类型
  3. 字符模板    查看与字符模板相关的键    *代表所有

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"

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号