当前位置:首页 > 开发语言 > 正文

redis的基本数据类型(redis设置开机自启动)

redis的基本数据类型(redis设置开机自启动)

Redis缓存是针对于业务数据缓存还是对数据库数据缓存不应该问Redis缓存的是业务数据还是数据库数据,可以问Redis是属于业务层还是数据层,这样问比较合理。我觉得R...

Redis缓存是针对于业务数据缓存还是对数据库数据缓存

不应该问Redis缓存的是业务数据还是数据库数据,可以问Redis是属于业务层还是数据层,这样问比较合理。

我觉得Redis属于数据层;首先我们先看一个概念。

DAO

dataaccessobject:数据访问对象

主要用来封装对数据的访问,注意,是对数据的访问,不是对数据库的访问。

其实你的数据可以在数据库,在文件中,还是在Redis中,都可以通过DAO层访问。

所以我把Redis看成和数据库是同一个级别的。

Mybatis的二级缓存

我们使用Redis的时候,很多时候都是通过代码操作Redis,比如使用用Jedis,其实还有一个简单的办法,就是使用Redis做Mybatis的二级缓存,只需要做简单的配置和极少量的代码即可。

我们之前做的一个项目,会有大量的数据需要频繁被查询,很少(几乎没有)做新增修改删除的操作,这种数据很适合使用Redis进行缓存,所以新的版本想把Redis引入进来。

引入所需要的jar包:

增加配置文件

实现org.apache.ibatis.cache.Cache接口

mybatis-config.xml开启二级缓存:

<settingname="cacheEnabled"value="true"/>

mybatis的Mapper配置文件中增加配置:

<cachetype="com.xxx.xxx.cache.RedisCache"/>

其中useCache="false"表示,这个查询SQL不进行缓存;useCache="true",这个查询SQL的结果进行缓存。

其余的insert、update、delete操作,可以进行如下配置:flushCache="true/false",当设置成true的时候,执行sql会把redis中的缓存删除(调用Cache实现类的clear()方法),设置成false,则不做操作。

所以到这里也可以清楚的理解何时进行缓存、何时进行删除缓存了:程序刚启动的时候,Redis中是空的。每次执行select的时候,首先会去redis读取,读取不到的话,再去db中查询,查询结束后,将结果存入redis中(key里面包含了SQL语句),注意,如果sql查询无结果,也会放入redis中。执行insert、update、delete语句的时候,清除对应的redis中的值。

整理的功能实现还是很简单的,大家有兴趣可以尝试一下。

如果大家需要demo的源码,后续我整理一下发出来,有需要的朋友可以关注下我。

redis可以存储哪些数据类型

redis开创了一种新的数据存储思路,使用redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。 redis常用数据类型 redis最为常用的数据类型主要有以下五种:string、hash、list、set、sortedset

redis七种数据类型

7种类型分别是:

1.字符串(string)

2.哈希(hash)

3.列表(list)

4.集合(set)

5.有序集合(sortedset)

6.位图(Bitmaps)

7.基数统计(HyperLogLogs)

a、字符串

String是一组字节。在Redis数据库中,字符串是二进制安全的。这意味着它们具有已知长度,并且不受任何特殊终止字符的影响。可以在一个字符串中存储最多512兆字节的内容。

b、哈希

哈希是键值对的集合。在Redis中,哈希是字符串字段和字符串值之间的映射。因此,它们适合表示对象。

c、列表

Redis列表定义为字符串列表,按插入顺序排序。可以将元素添加到Redis列表的头部或尾部。

d、集合

集合(set)是Redis数据库中的无序字符串集合。在Redis中,添加,删除和查找的时间复杂度是O(1)。

e、有序集合

Redis有序集合类似于Redis集合,也是一组非重复的字符串集合。但是,排序集的每个成员都与一个分数相关联,该分数用于获取从最小到最高分数的有序排序集。虽然成员是独特的,但可以重复分数。

f、位图RedisBitmap

RedisBitmap通过类似map结构存放0或1(bit位)作为值。

RedisBitmap可以用来统计状态,如日活是否浏览过某个东西。

Redissetbit命令

Redissetbit命令用于设置或者清除一个bit位。

*Redissetbit命令语法格式

SETBITkeyoffsetvalue

g、基数统计HyperLogLogs

RedisHyperLogLog可以接受多个元素作为输入,并给出输入元素的基数估算值

基数

集合中不同元素的数量,比如{'apple','banana','cherry','banana','apple'}的基数就是3

估算值

算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内

HyperLogLog的优点是:即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的、并且是很小的。

在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近264个不同元素的基数。

这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。

RedisPFADD命令

RedisPFADD命令将元素添加至HyperLogLog

*RedisPFADD命令语法格式

PFADDkeyelement[element...]

redis有哪些数据类型

redis目前能够在缓存领域迅速蚕食鲸吞memcached的市场占比,能够在分布式架构中扮演重要的地位,都与其支持多种数据类型(而memcached只支持一种)这个优势有关。

redis支持存储的数据类型一共有5种,但是根据我的工作经验,最常用的只有三种,接下来,我就介绍下最常用的三种。

List

list是redis中常用的数据类型,能够进行头尾查找,插入,移除(lpop,lpush,rpop,rpush等等);

支持像Python一样的分片读取(lrangeapi);

可以按照索引查找队列中元素(lindex),删除队列中元素(lrem),修改队列中元素(lset),还能获取队列长度(llen)。

list还有一个更加突出的功能,它可以从当前队列弹出一个值,然后插入到另一个队列中(BRPOPLPUSH)。这个过程是原子的,保证了数据一致性,避免由于中间步骤失败而导致数值丢失。

Set

set其实和list类似,但是正如平时我们了解的set,首先它的存储是无序的,其次它的存储是去重的。也就是说,如果你需要记录数据的插入顺序,或者可能会插入重复数据,并且数据不可去重的话,用list就更合适些,其它场景,就可以考虑用set。

set可以进行基础的增删(sadd,srem),也能进行进行集合操作,比如求差集(sdiff),求交集(sinter),求并集(sunion),返回集合中全部元素,但是并不将它们弹出(smember)。同时set也支持像list一样,用一个原子操作,把一个元素从当前set弹出,并压入另一个set(smove)。

hash

hash是redis中最常用的一种数据结构,其实就是我们常说的map。

它是一个string型的key-value,因此特别适用于存储序列化对象。理论上,每个hash可以存储40多亿个键值对。

hash的操作api要比set和list多了不少。

基础的有hset,hget,hdel,hexist(检查元素是否存在),hincrby(这个是为指定的整数字段加指定数值,相当于能够原子性的做到查找和修改,减少了我们自己去实现的麻烦)。

hash还有hgetAll,hgetKeys这种接口,能够批量的把hash中指定字段的全部内容都拉取回来。但是要慎用,我曾亲身经历过,在server高并发情况下,会导致server出现OOM。

除了上面介绍的常用的三种,redis还支持String和sortedset,但是由于不太常用,因此不在此介绍了。

以上是我的浅见,欢迎各位在下方评论区交流点赞。

我是苏苏思量,来自BAT的Java开发工程师,每日分享科技类见闻,欢迎关注我,与我共同进步。

最新文章