首页 > 代码库 > redis笔记 一

redis笔记 一

中文网站: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 移除键的过期时间

 

redis笔记 一