严格意义上讲,redis事物不支持 原子性和持久性(A和D),只支持隔离性和一致性(I和C)。这里的原子性指的是redis的事物操作,不支持事物的回滚,但redis是单线程模型,其本身的普通操作就是原子性的。
1、命令行操作:
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET Book_Name "GIt Pro"
QUEUED
127.0.0.1:6379> SADD Program_Language "C++" "C#" "Jave" "Python"
QUEUED
127.0.0.1:6379> GET Book_Name
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 4
3) "GIt Pro"
2、java代码:
//Transaction transaction = jedis.multi();
redisTemplate.multi();
redisTemplate.lpush("key", "11");
redisTemplate.lpush("key", "22");
redisTemplate.lpush("key", "33");
redisTemplate.exec();
注意一定要在配置文件中,开启事物:
Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。
因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。
比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。
另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis的速度比memcached快很多
(3) redis可以持久化其数据
(4) redis支持数据的备份,即 master-slave 模式的数据备份。
(5) 使用底层模型不同,它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
(6) redis最大存储的数据可以达到1GB,而memcache只有1MB
一致性可以分为最终一致性和强一致性。数据库和缓存双写,就必然会存在不一致的问题。如果对数据有强一致性要求,不能放缓存。我们所做的一切,只能保证最终一致性。
主要用于存放 bool 型数据,byte数组,使用位图操作 getbit/setbit 等将 byte 数组看成「位数组」来处理,大大减少节约存储空间。
特别注意的是位操作存放的是ASCII码。
例子:存储一个“hello”,利用Python 命令行可以很方便地得到每个字符的 ASCII 码的二进制值。
>>> bin(ord('h'))
'0b1101000' # 高位 -> 低位
>>> bin(ord('e'))
'0b1100101'
>>> bin(ord('l'))
'0b1101100'
>>> bin(ord('l'))
'0b1101100'
>>> bin(ord('o'))
'0b1101111'
使用redis作为spring的缓存路径,支持spring cache的环境。以springBoot工程为例
1、添加依赖和配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置redis文件,此处省略
字符串最大长度为512M。
初始化字符串:
> set ireader beijing.zhangyue.keji.gufen.youxian.gongsi
OK
获取字符串内容:
> get ireader
"beijing.zhangyue.keji.gufen.youxian.gongsi"
获取字符串长度:
> strlen ireader
(integer) 42
获取子串:
> getrange ireader 28 34
"youxian"
Redis是目前业界使用最广泛的内存数据存储。 相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。 除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。 可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。
在互联网场景下,尤其 2C 端大流量场景下,需要将一些经常展现和不会频繁变更的数据,存放在存取速率更快的地方。 缓存就是一个存储器,在技术选型中,常用 Redis 作为缓存数据库。
以获取商品详情举例,说明缓存的优势:
a. 从商品 Cache 中获取商品详情,如果存在,则返回获取 Cache 数据返回。
b. 如果不存在,则从商品 DB 中获取。获取成功后,将数据存到 Cache 中。则下次获取商品详情,就可以从 Cache 就可以得到商品详情数据。
c. 从商品 DB 中更新或者删除商品详情成功后,则从缓存中删除对应商品的详情缓存