首页 > 数据库 >redis基础知识

redis基础知识

时间:2022-08-25 10:56:39浏览次数:60  
标签:set runoob 元素 redis 基础知识 memcache key

1、redis jedis客户端 pipeline中可以传入function或consumer,里面可以写多条语句

2、redis客户端setnx: key不存在时才set,存在时则忽略

3、redis数据类型:

hash数据类型:即键值(key=>value)对集合,例子如下:
HMSET runoob field1 "Hello" field2 "World",其中runoob是key,field1和field2是field,Hello和world是value。
一个key可以存储2^32-1个键值对
HGET runoob field1 会返回Hello,HGET runoob field2 会返回World。

list数据类型:value是字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),列表最多可以存储2^32-1个元素。
lpush runoob mongodb
lpush runoob rabbitmq
lpush runoob kaffff
相当于给key添加了三个元素, lpush从头部插入,rpush从尾部插入数据
lrange runoob 0 10 可以返回该key指定范围里的元素
ltrim(String key, long start, long end) 可以修剪list中元素,只包含指定范围个数的元素
lrange(String key, long start, long end) 返回该key的列表里指定范围内的元素
llen(String key) 返回存储在key里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0
lpop(String key) 移除并且返回key对应的 list 的第一个元素
rpop(String key) 移除并返回存于key的 list 的最后一个元素

set数据类型:Set中元素是惟一的,set中最多可以存储2^32-1个元素
sadd runoob redis
sadd runoob mongodb
sadd runoob kafff

zset(sorted set:有序集合),和set一样,只是每个元素会关联个double类型的分数,redis会按照分数从小到大给元素排序

4、cny2022TigerLoginRecord.lettuce().sync().set(cacheKey, String.valueOf(System.currentTimeMillis()), new SetArgs().nx().ex(DAILY_RECORD_EXPIRE_TIME))

相当于setnx同时设置过期时间

5、incr和incrBy命令:如果key不存在,key的值会先被初始化为0,然后再增加

6、redis客户端对比:jedis, lettuce

jedis
  优点:支持全面的 Redis 操作特性(可以理解为API比较全面)
  缺点:
1、使用阻塞的 I/O,且其方法调用都是同步的,程序流需要等到 sockets 处理完 I/O 才能执行,不支持异步
2、Jedis 客户端实例不是线程安全的,所以需要通过连接池来使用 Jedis
lettuce:
  优点:支持同步异步通信模式。Lettuce 的 API 是线程安全的,如果不是执行阻塞和事务操作,如BLPOP和MULTI/EXEC,多个线程就可以共享一个连接

 

7、redis mget:批量查询,查询所有给定key的值

redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)

8、热key:瞬间有几十万的请求去访问redis某个固定的key,从而压垮缓存服务的情况。这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机。比如XX明星结婚。那么关于XX明星的Key就会瞬间增大,就会出现热数据问题。接下来这个key的请求,就会直接怼到你的数据库上,导致你的服务不可用

9、redis4.0版本后是多线程。之前版本是单线程,单线程指的是网络IO线程和Set/Get操作是由一个线程完成的。但是Redis 的持久化、集群同步还是使用其他线程来完成。4.0之后添加了多线程的支持,主要是体现在大数据的异步删除功能上,例如unlink key(此命令和del类似,用于删除指定的key,区别是此命令将键与键空间断开连接,实际的删除将稍后异步进行)、flushdb async(清空当前db中所有key)、flushall async(清空所有db的key)等。

10、redis单线程:选择单线程原因是使用简单,不存在锁竞争,可以在无锁的情况下完成所有操作,不存在死锁和线程切换带来的性能和时间上的开销,但同时单线程也不能完全发挥出多核 CPU 的性能。
redis为什么快:
1)Redis的大部分操作都在内存中完成,内存中的执行效率本身就很快,并且采用了高效的数据结构,比如哈希表和跳表。
2)使用单线程避免了多线程的竞争,省去了多线程切换带来的时间和性能开销,并且不会出现死锁。
3)采用I/O多路复用机制处理大量客户端的Socket请求,因为这是基于非阻塞的I/O模型,这就让Redis可以高效地进行网络通信,I/O的读写流程也不再阻塞

11、redis和memcache相同不同点:

相同:
数据都是放在内存中,数据会定时刷新到硬盘里,由于读写的是内存,所以速度很快
都有过期策略
不同:
memcache只支持kv形式,redis支持多种数据类型
redis当物理内存用完时,可以将一些很久没用过的kv交换到磁盘
过期策略:memcache在set时就指定,redis可以通过expire方法指定过期时间
memcache挂掉后数据就没了,redis数据可以做持久化,将内存中的数据保持在磁盘中,重启的时候可以再次加载使用
memcache挂掉后数据不可恢复,redis数据丢失后可以通过aof恢复
分布式存储:redis支持数据的备份,即master-slave模式的数据备份。memcache可以使用一致性hash做分布式
数据一致性:redis是单线程,保证数据按顺序提交。memcache使用cas(check and set)保证数据一致性,即对比版本号,如果一致就操作,不一致就放弃任何操作。
使用场景:
如果有数据持久方面的需求或对数据类型和处理有要求的应该选择redis
如果简单的kv存储,可以选memcache

 

标签:set,runoob,元素,redis,基础知识,memcache,key
From: https://www.cnblogs.com/MarkLeeBYR/p/16623521.html

相关文章

  • VUE 基础知识总结
    VUE的介绍VUE的导包<!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><!--开发环境版本--><scriptsrc="https://cdn.jsdel......
  • php代码实现redis连接池
    通常情况下,当我们需要做redis操作时,会创建一个连接,并基于这个连接进行redis操作,操作完成后,释放连接,一般情况下,这是没问题的,但当并发量比较高的时候,频繁的......
  • PHP代码连接Redis,含Redis密码验证、指定某一Redis数据库
    <?php$redis=newRedis();$redis->connect('127.0.0.1',6379);//连接Redis$redis->auth('mypasswords123sdfeak');//密码验证$redis->select(2);//选择......
  • Redis的访问安全
    redis连接不上,查看进程gpg-agentd刷爆CPU,恭喜你,你被挖矿了_保爷99的博客-CSDN博客 https://blog.csdn.net/mengruobaobao/article/details/79612423最近发现有一台测......
  • redis 2.2.7 for Windows
    PECL::Package::redis2.2.7forWindows http://pecl.php.net/package/redis/2.2.7/windowsredis2.2.7forWindowsPackageInformationSummaryPHPex......
  • Redis连环问
    Redis连环问Redis为什么这么快呢?基于内存:Redis是使用内存存储,没有磁盘IO上的开销。数据存在内存中,读写速度快。单线程实现(Redis6.0以前):Redis使用单个线程处理请求,避......
  • Redis(6)------通用命令
    Key相关命令在redis中无论什么数据类型,在数据库中都是以Key-value形式保存,通过进行对Redis-Key的操作来完成对数据库中数据的操作。常用命令keys*:查看当前数据库中的所......
  • Redis集群模式搭建
    Redis主要有三种集群方案:主从模式哨兵模式集群模式集群模式搭建Redis3.0版本之后才可用,推荐3主3从集群模式。1.启动6台Redis配置文件如下,redis_7002.conf...类......
  • 今日内容之 CSS盒子模型和JS基础知识数据类型
    CSS盒子模型所有的标签都可以看成是一个快递盒1.margin(外边距):标签之间的距离            两个快递盒之间的距离2.border(边框):标签的边框 ......
  • 一键编译安装Redis脚本
    #!/bin/bash./etc/init.d/functionsVERSION=redis-5.0.7PASSWORD=123456INSTALL_DIR=/usr/lcoal/redisinstall(){yum-yinstallgccjemalloc-devel||{act......