Redis的五大数据

Redis-五大数据类型&设置

➢ keys  * 

• 查询当前库的所有键

➢ exists  <key>

 • 判断某个键是否存在

➢ type  <key>  

 • 查看键的类型

➢ del  <key>

 • 删除某个键

➢ expire   <key>   <seconds> 

• 为键值设置过期时间,单位秒。

、➢ ttl   <key> 

• 查看还有多少秒过期,-1表示永不过期,-2表示已过期

➢ dbsize 

• 查看当前数据库的key的数量

需要慎用的两个命令:

因为在linux操作行中,redis中只要登录进去了,下面的操作是可以执行的

➢ flushdb 

• 清空当前库

➢ flushall 

• 通杀全部库

三、String

➢String是Redis最基本的类型,你可以理解成与 Memcached一模一样的类型,一个key对应一个value。
➢String类型是二进制安全的。意味着Redis的string可以 包含任何数据。比如jpg图片或者序列化的对象 。

➢String类型是Redis最基本的数据类型,一个Redis中字 符串value最多可以是512M

➢ get   <key> 

• 查询对应键值 

➢ set   <key>  <value>

 • 添加键值对

➢ append  <key>  <value> 

• 将给定的<value> 追加到原值的末尾

➢ strlen <key> 

• 获得值的长度

➢ setnx  <key>  <value>

• 只有在 key 不存在时设置 key 的值 

➢ incr <key>

 • 将 key 中储存的数字值增1 

• 只能对数字值操作,如果为空,新增值为1 

➢ decr <key> 

• 将 key 中储存的数字值减1 

• 只能对数字值操作,如果为空,新增值为-1

➢ incrby / decrby <key>  <步长> 

• 将 key 中储存的数字值增减。自定义步长

➢ 原子性

• 所谓原子操作是指不会被线程调度机制 打断的操作;这种操作一旦开始,就一 直运行到结束,中间不会有任何 context switch (切换到另一个线程)。

(1) 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作", 因为中断只能发生于指令之间。 (2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。

Redis单命令的原子性主要得益于Redis的单线程

➢ mset <key1>  <value1>  <key2>  <value2>  ..... 

• 同时设置一个或多个 key-value对 

➢ mget <key1>   <key2>   <key3> ..... 

• 同时获取一个或多个 value  

➢ msetnx <key1>  <value1>  <key2>  <value2>  ..... 

• 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

➢ getrange <key>  <起始位置>  <结束位置> 

• 获得值的范围,类似java中的substring

➢ setrange <key>   <起始位置>   <value> 

• 用 <value> 覆写<key> 所储存的字符串值,从<起 始位置>开始

➢ setex <key>  <过期时间>   <value>

• 设置键值的同时,设置过期时间,单位秒。

➢ getset <key>  <value>

• 以新换旧,设置了新值同时获得就值

List 

➢ 单键多值 

➢ Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元 素导列表的头部(左边)或者尾部(右边)。

 ➢ 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操 作中间的节点性能会较差。

Redis-五大数据类型&amp;设置

➢ lpush/rpush <key>  <value1>  <value2>  <value3> ....

 • 从左边/右边插入一个或多个值。 ➢ lpop/rpop <key> 

• 从左边/右边吐出一个值。

 • 值在键在,值光键亡。

➢ rpoplpush <key1>  <key2>

• 从<key1>列表右边吐出一个值,插到<key2>列表左边。

➢ lrange <key> <start> <stop>

• 按照索引下标获得元素(从左到右)

➢ lindex <key> <index>

• 按照索引下标获得元素(从左到右)

➢ llen <key>

• 获得列表长度

➢ linsert <key>  before <value>  <newvalue> 

• 在<value>的后面插入<newvalue> 插入值

➢ lrem <key> <n>  <value> 

• 从左边删除n个value(从左到右)

--Set

➢Redis set对外提供的功能与list类似是一个列表的功能, 特殊之处在于set是可以自动排重的,当你需要存储一个 列表数据,又不希望出现重复数据时,set是一个很好的 选择,并且set提供了判断某个成员是否在一个set集合内 的重要接口,这个也是list所不能提供的。

➢Redis的Set是string类型的无序集合。

它底层其实是一 个value为null的hash表,所以添加,删除,查找的复杂 度都是O(1)。

➢ sadd <key>  <value1>  <value2> ..... 

• 将一个或多个 member 元素加入到集合 key 当中,已 经存在于集合的 member 元素将被忽略

➢ smembers <key>

 • 取出该集合的所有值

➢ sismember <key>  <value> 

• 判断集合<key>是否为含有该<value>值,有返回1, 没有返回0

➢ scard <key>

• 返回该集合的元素个数。

➢ srem <key> <value1> <value2> ....

• 删除集合中的某个元素。

➢ spop <key>  

• 随机从该集合中吐出一个值。

➢ srandmember <key> <n>

• 随机从该集合中取出n个值。 • 不会从集合中删除

➢ sunion <key1> <key2>  

• 返回两个集合的 并集元素。

➢ sinter <key1> <key2>  

• 返回两个集合的交集元素。

➢ sdiff <key1> <key2>  

• 返回两个集合的差集元素。

-->hash

➢ Redis hash 是一个键值对集合。
➢ Redis hash是一个string类型的field和value的映射表,
hash特别适合用于存储对象。

➢ 类似Java里面的Map<String,Object>

➢ hset <key>  <field>  <value>

• 给<key>集合中的 <field>键赋值<value>

➢ hget <key1>  <field>   

• 从<key1>集合<field> 取出 value

➢ hmset <key1>  <field1> <value1> <field2> <value2>...   

• 批量设置hash的值

 hexists key  <field>
• 查看哈希表 key 中,给定域 field 是否存在。

➢ hkeys <key>   

➢ hvals <key>   

➢ hsetnx <key>  <field> <value>

• 为哈希表 key 中的域 field 的值加上增量 increment
• 列出该hash集合的所有field
• 列出该hash集合的所有value

➢ hincrby <key> <field>  <increment>

• 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 .


-->zset  (sorted set)

Redis有序集合zset与普通集合set非常相似,是 一个没有重复元素的字符串集合。不同之处是有序集合 的没有成员都关联了一个评分(score) ,这个评分 (score)被用来按照从最低分到最高分的方式排序集 合中的成员。集合的成员是唯一的,但是评分可以是重 复了 。 因为元素是有序的, 所以你也可以很快的根据评分 (score)或者次序(position)来获取一个范围的元 素。访问有序集合的中间元素也是非常快的,因此你能够 使用有序集合作为一个没有重复成员的智能列表。 

➢ zadd  <key> <score1> <value1>  <score2> <value2>...

• 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。

➢ zrange <key>  <start> <stop>  [WITHSCORES]   

➢ zrangebyscore key min max [withscores] [limit offset count]

• 返回有序集 key 中,下标在<start> <stop>之间的元素 • 带WITHSCORES,可以让分数一起和值返回到结果集。
• 返回有序集 key 中,所有 score 值介于 min 和 max 之间 (包括等于 min 或 max )的成员。有序集成员按 score 值递 增(从小到大)次序排列。

➢ zrevrangebyscore key max min [withscores] [limit offset count]

• 同上,改为从大到小排列。

➢ zincrby <key> <increment> <value>

• 为元素的score加上增量

➢ zrem <key>  <value>  

• 删除该集合下,指定值的元素

➢ zcount <key>  <min>  <max> 

• 统计该集合,分数区间内的元素个数

➢ zrank <key>  <value> 

• 返回该值在集合中的排名,从0开始

-->Redis相关配置

➢ 计量单位说明

Redis-五大数据类型&amp;设置

➢ 大小写不敏感

➢include

Redis-五大数据类型&amp;设置

类似jsp中的include,多实例的情况可以把公用的配 置文件提取出来

➢ip地址的绑定(bind)

默认情况bind=127.0.0.1只能接受本机的访问请求
不写的情况下,无限制接受任何ip地址的访问
生产环境肯定要写你应用服务器的地址

如果开启了protected-mode,那么在没有设定bind ip且 没有设密码的情况下,Redis只允许接受本机的响应

➢tcp-backlog

可以理解是一个请求到达后至到接受进程处理前的队列
backlog队列总和=未完成三次握手队列 +  已经完成 三次握手队列

高并发环境tcp-backlog 设置值跟超时时限内的Redis 吞吐量决定

➢timeout

 一个空闲的客户端维持多少秒会关闭,0为永不关闭

➢TCP keepalive

 对访问客户端的一种心跳检测,每个n秒检测一次。

官方推荐设为60秒。

➢daemonize

是否为后台进程

➢ pidfile

存放pid文件的位置,每个实例会产生一个不同的pid文件

➢ log level 

四个级别根据使用阶段来选择,生产环境选择notice 或者 warning

➢ logfile 

日志文件名称

➢ syslog

是否将Redis日志输送到linux系统日志服务中

➢ syslog-ident

日志的标志 

➢ syslog-facility 

输出日志的设备

➢ database 

设定库的数量 默认16

➢ security

• 在命令行中设置密码

Redis-五大数据类型&amp;设置

➢ maxclient

• 最大客户端连接数

➢ maxmemory 

• 设置Redis可以使用的内存量。一旦到达内存使用上限,

Redis将会试图移除内部数据,移除规则可以通过
maxmemory-policy来指定。如果Redis无法根据移除规则来

移除内存中的数据,或者设置了“不允许移除”, 

• 那么Redis则会针对那些需要申请内存的指令返回错误信息,

比如SET、LPUSH等。

➢ Maxmemory-policy

(1)volatile-lru:使用LRU算法移除key,只对设置了过期时间的

(2)allkeys-lru:使用LRU算法移除key
(3)volatile-random:在过期集合中移除随机的key,只对设置了
过期时间的键
(4)allkeys-random:移除随机的key
(5)volatile-ttl:移除那些TTL值最小的key,即那些最近要过期
的key

(6)noeviction:不进行移除。针对写操作,只是返回错误信息

➢ Maxmemory-samples

• 设置样本数量,LRU算法和最小TTL算法都并非是精确的算 法,而是估算值,所以你可以设置样本的大小。 

• 一般设置3到7的数字,数值越小样本越不准确,但是性能 消耗也越小

相关文章: