Redis详解

来源:互联网 发布:nginx 时间函数 编辑:程序博客网 时间:2024/04/30 04:41

序言

最近正在换工作,老被人问起缓存,说实话项目中只用到了Redis,虽然缓存组件很多,相比较而言,Redis可以持久化,宕机重启还能再次加载,它除了键值还支持list,set,zset,hash等数据结构,并且可以支持数据备份(master-slave)等等,所以当时选型的时候选了Redis。

数据结构

1、String(字符串)

命令:set key value                   设置key=valueget key                         或者键key对应的值getrange key start end          得到字符串的子字符串存放在一个键getset key value                设置键的字符串值,并返回旧值getbit key offset               返回存储在键位值的字符串值的偏移mget key1 [key2..]              得到所有的给定键的值setbit key offset value         设置或清除该位在存储在键的字符串值偏移setex key seconds value         键到期时设置值setnx key value                 设置键的值,只有当该键不存在setrange key offset value       覆盖字符串的一部分从指定键的偏移strlen key                      得到存储在键的值的长度mset key value [key value...]   设置多个键和多个值msetnx key value [key value...] 设置多个键多个值,只有在当没有按键的存在时psetex key milliseconds value   设置键的毫秒值和到期时间incr key                        增加键的整数值一次incrby key increment            由给定的数量递增键的整数值incrbyfloat key increment       由给定的数量递增键的浮点值decr key                        递减键一次的整数值decrby key decrement            由给定数目递减键的整数值append key value                追加值到一个键del key                         如果存在删除键dump key                        返回存储在指定键的值的序列化版本exists key                      此命令检查该键是否存在expire key seconds              指定键的过期时间expireat key timestamp          指定的键过期时间。在这里,时间是在unix时间戳格式pexpire key milliseconds        设置键以毫秒为单位到期pexpireat key milliseconds-timestamp        设置键在unix时间戳指定为毫秒到期keys pattern                    查找与指定模式匹配的所有键move key db                     移动键到另一个数据库persist key                     移除过期的键pttl key                        以毫秒为单位获取剩余时间的到期键。ttl key                         获取键到期的剩余时间。randomkey                       从redis返回随机键rename key newkey               更改键的名称renamenx key newkey             重命名键,如果新的键不存在type key                        返回存储在键的数据类型的值。

2、List(列表)

命令:blpop key1 [key2 ] timeout 取出并获取列表中的第一个元素,或阻塞,直到有可用brpop key1 [key2 ] timeout 取出并获取列表中的最后一个元素,或阻塞,直到有可用brpoplpush source destination timeout 从列表中弹出一个值,它推到另一个列表并返回它;或阻塞,直到有可用lindex key index 从一个列表其索引获取对应的元素linsert key before|after pivot value 在列表中的其他元素之后或之前插入一个元素llen key 获取列表的长度lpop key 获取并取出列表中的第一个元素lpush key value1 [value2] 在前面加上一个或多个值的列表lpushx key value 在前面加上一个值列表,仅当列表中存在lrange key start stop 从一个列表获取各种元素lrem key count value 从列表中删除元素lset key index value 在列表中的索引设置一个元素的值ltrim key start stop 修剪列表到指定的范围内rpop key 取出并获取列表中的最后一个元素rpoplpush source destination 删除最后一个元素的列表,将其附加到另一个列表并返回它rpush key value1 [value2] 添加一个或多个值到列表rpushx key value 添加一个值列表,仅当列表中存在

3、Hash(字典)

命令:hdel key field[field...] 删除对象的一个或几个属性域,不存在的属性将被忽略hexists key field 查看对象是否存在该属性域hget key field 获取对象中该field属性域的值hgetall key 获取对象的所有属性域和值hincrby key field value 将该对象中指定域的值增加给定的value,原子自增操作,只能是integer的属性值可以使用hincrbyfloat key field increment 将该对象中指定域的值增加给定的浮点数hkeys key 获取对象的所有属性字段hvals key 获取对象的所有属性值hlen key 获取对象的所有属性字段的总数hmget key field[field...] 获取对象的一个或多个指定字段的值hset key field value 设置对象指定字段的值hmset key field value [field value ...] 同时设置对象中一个或多个字段的值hsetnx key field value 只在对象不存在指定的字段时才设置字段的值hstrlen key field 返回对象指定field的value的字符串长度,如果该对象或者field不存在,返回0.hscan key cursor [match pattern] [count count] 类似scan命令

4、Set(集合)

命令:sadd key member [member ...] 添加一个或者多个元素到集合(set)里scard key 获取集合里面的元素数量sdiff key [key ...] 获得队列不存在的元素sdiffstore destination key [key ...] 获得队列不存在的元素,并存储在一个关键的结果集sinter key [key ...] 获得两个集合的交集sinterstore destination key [key ...] 获得两个集合的交集,并存储在一个集合中sismember key member 确定一个给定的值是一个集合的成员smembers key 获取集合里面的所有keysmove source destination member 移动集合里面的一个key到另一个集合spop key [count] 获取并删除一个集合里面的元素srandmember key [count] 从集合里面随机获取一个元素srem key member [member ...] 从集合里删除一个或多个元素,不存在的元素会被忽略sunion key [key ...] 添加多个set元素sunionstore destination key [key ...] 合并set元素,并将结果存入新的set里面sscan key cursor [match pattern] [count count] 迭代set里面的元素
5、Sorted Set(有序集合)

命令:zadd key score1 member1 [score2 member2] 添加一个或多个成员到有序集合,或者如果它已经存在更新其分数zcard key 得到的有序集合成员的数量zcount key min max 计算一个有序集合成员与给定值范围内的分数zincrby key increment member 在有序集合增加成员的分数zinterstore destination numkeys key [key ...] 多重交叉排序集合,并存储生成一个新的键有序集合。zlexcount key min max 计算一个给定的字典范围之间的有序集合成员的数量zrange key start stop [withscores] 由索引返回一个成员范围的有序集合(从低到高)zrangebylex key min max [limit offset count]返回一个成员范围的有序集合(由字典范围)zrangebyscore key min max [withscores] [limit] 返回有序集key中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员,有序集成员按 score 值递增(从小到大)次序排列zrank key member 确定成员的索引中有序集合zrem key member [member ...] 从有序集合中删除一个或多个成员,不存在的成员将被忽略zremrangebylex key min max 删除所有成员在给定的字典范围之间的有序集合zremrangebyrank key start stop 在给定的索引之内删除所有成员的有序集合zremrangebyscore key min max 在给定的分数之内删除所有成员的有序集合zrevrange key start stop [withscores] 返回一个成员范围的有序集合,通过索引,以分数排序,从高分到低分zrevrangebyscore key max min [withscores] 返回一个成员范围的有序集合,以socre排序从高到低zrevrank key member 确定一个有序集合成员的索引,以分数排序,从高分到低分zscore key member 获取给定成员相关联的分数在一个有序集合zunionstore destination numkeys key [key ...] 添加多个集排序,所得排序集合存储在一个新的键zscan key cursor [match pattern] [count count] 增量迭代排序元素集和相关的分数
生命周期

expire 为给定key设置生存时间,当key过期时它会被自动删除。(单位秒)过期后会延迟删除,不同的版本延迟时间不同,persist可以移除生命周期。

expireat 为给定key设置生存时间戳。

pexpire 为给定key设置生存时间。单位毫秒

pexpireat 为给定key设置生存时间戳。(以毫秒)

事务机制

redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 由于redis是单线程来处理所有client的请求的所以做到这点是很容易的。一般情况下redis在接受到一个client发来的命令后会立即处理并 返回处理结果,但是当一个client在一个连接中发出multi命令,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一 个队列中。当从此连接受到exec命令后,redis会顺序的执行队列中的所有命令。并将所有命令的运行结果打包到一起返回给client.然后此连接就 结束事务上下文。

命令开始:multi

命令结束:exec

注意原理是事务开始后,后面的命令都在队列里面,事务提交后再执行。