Redis的五大数据
➢ keys *
• 查询当前库的所有键
➢ exists <key>
• 判断某个键是否存在
➢ type <key>
• 查看键的类型
➢ del <key>
• 删除某个键
➢ expire <key> <seconds>
• 为键值设置过期时间,单位秒。
、➢ ttl <key>
➢ 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>
• 设置键值的同时,设置过期时间,单位秒。
• 以新换旧,设置了新值同时获得就值
List
➢ 单键多值
➢ Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元 素导列表的头部(左边)或者尾部(右边)。
➢ 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操 作中间的节点性能会较差。
➢ 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)
➢ 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相关配置
➢ 计量单位说明
➢ 大小写不敏感
➢include
类似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
• 在命令行中设置密码
➢ 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的数字,数值越小样本越不准确,但是性能 消耗也越小