Redis五大数据类型

一、16个数据库

redis默认使用第0个数据库

1、使用select切换数据库:select 3

2、查看当前数据库所有的key:keys *

 3、清除当前数据库数据:flushdb

 4、清除全部数据库数据:flushall

二、五大数据类型

redis-key

①判断键是否存在: exists name

②移除键:move name 1

③给键设置过期时间:expire name 10

查看键值类型:type name

1、String(字符串)

①追加:append name 'hello world'

 

 ②获取字符串的长度:strlen name

 ③自增、自减

 ④截取字符串:getrange name 0 2

 

 ⑤替换字符串

 

⑥setex(set with expire)设置过期时间

⑦setnx(set if not exist) 不存在则创建

 

 ⑧mset:同时设置多个值

mget:同时获取多个值

msetnx:不存在则创建,存在则黄建失败

 

 ⑨getset:先get后set

 

string类型的使用场景(value除了是我们的字符串,还可以是数字):计数器、统计数量

2、List (列表)

在redis中,我们可以把list完成栈,队列、阻塞队列

所有的list命令都是l开头的,redis命令不区分大小写

①lpush:往左插入

rpush:往右插入

②lpop:移除列表第一个元素

rpop:移除列表最后一个元素

 

 ③lidex

 

 ④llen:获取列表的长度

 

⑤lrem:移除list中指定个数的value

 ⑥ltrim:截取list

⑦rpoplpush

⑧lset:更新列表中指定下标的数据

 

 ⑨linsert:将某个具体的value插入到列表中某个元素的前面后者后面

 

总结:

实际上是一个链表

如果key不存在,创建新的链表

如果key存在,新增内容

如果移除了所有值,空链表,也代表不存在

在两边插入或者改动值,效率最高,中间元素相对来说效率会低一些

3、Set(集合)

set中的值是不能重复的:无序不重合

①添加值、查看值、成员判断、集合元素个数

 

②移除

 

③随机获取/删除集合中某一个元素

 

 

④将一个集合中的元素移动到另一个元素中

⑤差集、交集、并集

 

微博,B站,共同关注(并集)

微博:A用户将所有关注的人放在一个集合中,将他的粉丝也放在一个集合中(共同关注、共同爱好、推荐好友)

4、Hash(哈希)

map集合,key-map集合,本质和Srting类型没有太大的区别,还是一个简单的key-value

①添加值/获取值

②删除值

 

③获取长度:hlen

④判断字段存在

 

⑤只获取所有字段

只获取所有value

应用:变更的数据,user、name、age,尤其是用户用户信息之类的,经常变动的信息。

hash更适合对象的存储,String更合适字符串的存储

5、Zset(有序集合)

①添加、查看

②排序

③删除

④获取有序集合中的个数

 ⑤获取指定区间的成员数量

三、事物

1、基本原理

redis事物本质:一组命令的集合。一个事物中所有的命令都会被序列化,在事务执行过程中,按照顺序执行

一次性、顺序性、排他性 执行一些列的命令。

所以redis事物没有隔离级别的概念

所有命令在事物中,并没有直接被执行,只有发起执行命令的时候才会执行

redis单条命令保证原子性的,但是事物不保证原子性

2、步骤

redis的事物:开启事物(multi)、命令入队、执行事物(exec)

3、演示

正常执行事物:

 取消事物:

编译型异常(代码有问题,命令有错误),事物中所有的命令都不会被执行

运行是异常(I/O),如果事物队列中存在语法性,那么执行命令的时候,其他命令是可以正常那个执行的,错误命令抛异常

 

四、redis实现乐观锁

1、监控(Watch)(面试常问)

悲观锁:很悲观,认为什么时候都会出问题,无论做什么都会加锁

乐观锁:很乐观,认为什么时候都不会出现错误,所以不会加锁。更新数据的时候去判断一下在此期间是否有人修改过这个数据(获取version,更新的时候比较version)

2、redis的监视测试

正常执行成功:

测试多线程修改值,,使用watch可以当做redis的乐观锁操作:

如果修改失败,先解锁,获取最新的值

 

原文地址:https://www.cnblogs.com/zhangguosheng1121/p/14891662.html