中文网站:http://redis.cn/documentation.html
英文网站:https://redis.io/
1.安装:
$ tar xzf redis-3.2.8.tar.gz
$ cd redis-3.2.8
$ make
服务端启动
$ src/redis-server
客户端启动
$ src/redis-cli
2.redis配置两个以及两个以上服务实例
redis实例的运行基于【redis.conf】,所以配置多个实例时,需要配置多个【redis.conf】文件。
$ vi redis6380.conf
daemonize yes #后台进程运行 pidfile pidfile/var/run/redis/redis_6380.pid port 6380 logfile logfile/var/log/redis/redis_6380.log rdbfile dbfilenamedump_6380.rdb
$ src/redis-server /etc/redis6380.conf
配置其他实例时,重复以上步骤。
3.配置Redis成为一个缓存
如果你想把Redis当做一个缓存来用,所有的key都有过期时间,那么你可以考虑 使用以下设置(假设最大内存使用量为2M):
maxmemory 2mb
maxmemory-policy allkeys-lru
以上设置并不需要我们的应用使用EXPIRE(或相似的命令)命令去设置每个key的过期时间,因为 只要内存使用量到达2M,Redis就会使用类LRU算法自动删除某些key。
相比使用额外内存空间存储多个键的过期时间,使用缓存设置是一种更加有效利用内存的方式。而且相比每个键固定的 过期时间,使用LRU也是一种更加推荐的方式,因为这样能使应用的热数据(更频繁使用的键) 在内存中停留时间更久。
基本上这么配置下的Redis可以当成memcached使用。
当我们把Redis当成缓存来使用的时候,如果应用程序同时也需要把Redis当成存储系统来使用,那么强烈建议 使用两个Redis实例。一个是缓存,使用上述方法进行配置,另一个是存储,根据应用的持久化需求进行配置,并且 只存储那些不需要被缓存的数据。
请注意:用户需要详细阅读示例redis.conf文件来决定使用什么内存上限处理策略。
4.redis事务
用法
MULTI 命令用于开启一个事务,它总是返回 OK 。 MULTI 执行之后, 客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行, 而是被放到一个队列中, 当 EXEC命令被调用时, 所有队列中的命令才会被执行。
另一方面, 通过调用 DISCARD , 客户端可以清空事务队列, 并放弃执行事务。
EXEC 命令的回复是一个数组, 数组中的每个元素都是执行事务中的命令所产生的回复。 其中, 回复元素的先后顺序和命令发送的先后顺序一致。
当客户端处于事务状态时, 所有传入的命令都会返回一个内容为 QUEUED 的状态回复(status reply), 这些被入队的命令将在 EXEC 命令被调用时执行。
redis不支持回滚。
5.redis的数据类型
5.1.字符串
set key value 设定string类型的key,value get key mset key value [key value...] mget key [key...] del key 删除key keys key 列出key type key 查看key的类型 strlen key 计算key值的长度
5.2.列表(有序,不唯一)
lpush key value [value...] 向列表左端追加元素 rpush key value [value...] 向列表右端追加元素 lpop key 从列表左端弹出一个元素 rpop key 从列表右端弹出一个元素 llen key 计算列表中元素的个数 lrange key start stop 获取start到stop之间的元素ltrim key start end 队列表进行修剪,只保留start到end范围内的元素。(start和end元素也会被保留) lrem key count value count>0,从左边开始删除前count个值为value的元素 count<0,从右边开始删除前|count|个值为value的元素 count=0,从删除全部值为value的元素
5.3.集合(无序,唯一)
sadd key member [member...] 向集合中添加一个或多个元素 srem key member [member...] 从集合中删除一个或多个元素 smembers key 获取集合中全部元素 sismember key member 判断元素是否在集合中scard scard key 返回集合包含的元素数量
5.4.散列
hset key field value 设定hash类型的key,一个字段的名字和值 hget key field hmset key field value [field value...] hmget key field [field...]hdel key field [field...] 删除一个散列里一个或者多个键值对 hgetall key 取key的全部信息 hkeys key 取key中全部字段 hvals key 取key中全部值hlen key 返回散列包含的键值对数量
5.5.有序集合
5.6.发布与订阅
subscribe channel【channel...】 订阅给定的一个或者多个频道unsubscribe channel【channel...】 退订给定的一个或者多个频道publish channel message 向给定频道发送消息
5.7.键的过期时间
1.expire(为给定 key 设置生存时间 秒) 语法:expire key seconds redis> SET cache_page "www.google.com" OK redis> EXPIRE cache_page 30 # 设置过期时间为 30 秒 (integer) 1 redis> TTL cache_page # 查看剩余生存时间 (integer) 23 redis> EXPIRE cache_page 30000 # 更新过期时间 (integer) 1 redis> TTL cache_page (integer) 29996 2.expireat(为给定key设置生存周期unix时间戳) 语法:expireat key timestamp redis> SET cache www.google.com OK # 这个 key 将在 2012.12.12 过期 redis> EXPIREAT cache 1355292000 (integer) 1 redis> TTL cache (integer) 45081860 3.pexpire(使用毫秒设置key的生存时间) 语法:pexpire key milliseconds key 不存在或设置失败,返回 0 redis> SET mykey "Hello" OK redis> pexpire mykey 1500 (integer) 1 4. TTL 的返回值以秒为单位 redis> TTL mykey (integer) 2 5. PTTL 可以给出准确的毫秒数 redis> PTTL mykey (integer) 1499 6.pexpireat(使用毫秒设置key的生存时间戳) 语法:pexpireat key milliseconds-timestamp redis> SET mykey "Hello" OK redis> PEXPIREAT mykey 1555555555005 (integer) 1 7. persist key 移除键的过期时间