CAP理论
C:强一致性
A:高可用性
P:分区容忍性
BASE
BA:基本可用
S:
E:最终一致性
Redis和Memcache的区别
1)从实现来看:
Redis:单线程
Memcache:多线程(区别:多线程中存在cpu在线程上下文切换,时间都耗费在切换上)
2)从存储方式来看:
Redis支持数据持久化和主从备份,数据更安全
Memcache,数据存于内存,没有持久化功能
3)从功能来看:
reids除了基本的k-v结构,支持多种其他复杂结构,事务等高级功能
Memcache只支持基本的k-v结构
4)从可用性看:
redis支持主从备份,数据分片,哨兵监控
Memchche没有分片功能,需要从客户端支持。
启动:
./redis-server redis.conf
redis-server /*/*/redis.conf
客户端
redis-cli
redis-cli -p 6379
开启后
config get dir ##获得当前路径
config set requirepass "***" ##设置密码
访问前需得命令 auth “***” ##开启认证
客户端发送shutdown断开redis链接,关闭redis
Reis数据结构
String ----> Map<String,String>
List ----> Map<String,List<String>>
Set ----> Map<String,Set<String>>
Sort_Set----> 可排序的Set
Hash ----> Map<String,Map<String,String>>
常见命令
可使用 help命令 查找自己需要的命令
如 help keys 会显示:
KEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic
一般禁用keys,因为redis是单线程,而数据量大的时候,redis的其他命令无法使用。
EXISTS key 是否存在
DEL key 删除
select num 切换库(集群时,禁用)可修改 默认为16个
hash结构命令
hset user:1 name zs
hset user:1 age 21
hget user:1 age
hgetall user:1 ##获取整个user:1的map
hmset customer name zs id 11 age 23 ##设置多个属性
hdel key
string命令
incrby key num ##增加num为key的值,用于int
decrby key num
set key val
set k1 v1 k2 v2 k3 v3
get key
getrange key begin end ##getrange age 0 1类似于between and
setrange key begin end ##可替换字符串
exists key ##是否存在
setex key time value ##设置一个key并声明存活时间
ttl key ##查看key的生命周期 -2代表已过期
安装好redis在虚拟机上,然后通过配置文件连接。
list命令
lpush key v1 v2 v3 ##存入 正进反出 类似于栈 从左边入栈
lrange key begin end ##范围查看
rpush key v1 v2 v3 ##存入 怎么进怎么出 从右边入栈
lpop key ##右边出栈
rpop key ##左边出栈
lindex key index ##索引位置
lrem key num value ##删除key中的num个value
set命令
sadd key v1 v2 v3 ##无重复值,有的话会被覆盖
scard key ##集合个数
smembers key ##查看集合元素
srem key index ##删除指定索引的元素
srandmember key num ##随机从集合中出num个value
spop key ##随机出栈一个value
缓存清除策略:
1)volatile-lru :使用lru算法移除key,只对于设置了过期时间的key
2)allkeys-lru:使用lru算法移除所有key
3)volatile-random:在过期集合中随机移除key,只对于设置了过期时间的key
4)allkeys-random:移除随机的key,对于所有的key
5)volatile-ttl:移除拿写ttl值最小的key。即那些即将过期的key(timetolive)
6)noeviction:不进行移除。对于写操作,只是返回错误信息,生产不适用该策略。
Spring Data Redis的demo
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring:
redis:
host: 39.108.254.46
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private StringRedisTemplate redisTemplate;
@Test
public void contextLoads() {
//操作String
redisTemplate.opsForValue().set("master","hkf");
String master = redisTemplate.opsForValue().get("master");
System.out.println("master = " + master);
//操作Hash
BoundHashOperations<String, Object, Object> ops = redisTemplate.boundHashOps("user:2");
ops.put("name","hkf");
ops.put("age","23");
System.out.println(ops.get("name"));
System.out.println(ops.get("age"));
Map<Object, Object> entries = ops.entries();
System.out.println("entries = " + entries);
}