当先锋百科网

首页 1 2 3 4 5 6 7

redis 用 c 语言编写 ,是单线程的 , 执行效率高。

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

  • Redis支持数据的备份,即master-slave模式的数据备份。

1. Redis 数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

2. Redis 键 (key)

用于操作管理redis的键

命令描述
del [key]在key存在时删除key
exists [key]判断key是否存在
expire [key] [time]为key设置过期时间 单位:秒
keys [pattern]模式匹配key
move [key] [db]将key移动至给定数据库db
persist [key]移除key的过期时间
ttl [key]返回key的剩余时间
rename [key] [newkey]修改key的名称

3. Redis 字符串

命令描述
set [key] [value]设置key的值,已存在则覆盖
setnx [key] [value]设置key的值,已存在不执行
mset [key] [value] …批量设置key的值,已存在则覆盖
msetnx [key] [value] …批量设置key的值,已存在不执行
get [key]获取指定key的值
mget [key1] [key2] …获取多个key值
getrange [key] [start] [end]从start和end之间截取key的value值
getset [key] [value]将指定的key值修改为value ,并返回未修改之前的value
incr [key]value 增 1
incrby [key] [num]将给定的key增加num, num为整数
incrbyfloat [key] [num]将给定的key增加num,num可以为float型
decr [key]value 减 1
decrby [key] [num]将给定的key减少num,value为整数
strlen [key]返回key字符串长度

4. Redis 哈希 (Hash)

redis hash 是一个string类型的field和value的映射表,一般用于储存对象。

命令描述
hmset [key] [field value] …同时将多个 field-value (域-值)对设置到哈希表 key 中
hset [key] [field] [value]将哈希表key中的field字段设置为value
hsetnx [key] [field] [value]将哈希表key中的field字段设置为value ,field不存在时设置,存在不执行
hgetall [key]获取key的所有字段和值
hmget [key] [field1] [field2] …获取key的所有给定字段field的值value
hkeys [key]获取哈希表中所有的key
hlen [key]获取哈希表key中字段的数量
hexists [key] [field]查看哈希表中指定的field是否存在
hincrby [key] [field] [num]为哈希表 key 中的指定字段的值加上增量num (整数)
hincrbyfloat [key] [field] [num]为哈希表 key 中的指定字段的值加上增量num (浮点数)

5. Redis 列表 (List)

redis list 是一个由多个字符串组成的列表, 按插入顺序排序

命令描述
lpush [key] [value1, value2 …]将一个或多个value值插入列表key头部
rpush [key][value1, value2 …]将一个或多个value值插入列表key尾部
lpushx [key] [value]将一个值插入到一个已存在的列表头部
rpushx [key] [value]将一个值插入到一个已存在的列表尾部
lpop [key]移除,并获取列表第一个元素
rpop [key]移除,并获取列表最后一个元素
blpop [key1 key2 …] [timeout]移除,并获取列表第一个元素,如果列表没有元素,等待数据,直至超时,可以存在多个key
brpop [key1 key2 …] [timeout]移除,并获取列表最后一个元素,如果列表没有元素,等待数据,直至超时,可以存在多个key
lset [key] [index] [value]通过索引index设置列表key的value值
ltrim [key] [start] [stop]对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
llen [key]获取列表长度

6. Redis 集合 (Set)

redis set 是一个String类型的无序集合,集合成员是唯一的。

命令描述
sadd [key] [members …]向集合添加一个或多个成员
scard [key]获取集合的成员数
sdiff [key1, key2 ,key3 …]返回第一个集合和其他集合的差异
sdiffstore [key0] [key1, key2 …]返回给定所有集合key1, key2 … 的差集,结果储存在key0中
sinter [key1, key2 …]返回给定所有集合的交集
sinterstore [key0] [key1,key2 …]返回给定所有集合key1, key2 … 的交集,结果储存在key0中
sismember [key] [member]判断member元素是否是集合key的成员
sunion [key1,key2 …]返回所有给定集合的并集
sunionstore [key0] [key1, key2 …]返回给定所有集合key1, key2 … 的并集,结果储存在key0中
smembers [key]返回集合中所有成员
spop [key]移除并返回集合中的一个随机元素
srandmember [key] [count]返回集合中一个或多个随机数
srem [key] [member , …]移除集合中一个或多个成员

7. Redis 发布订阅

redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。

创建订阅频道名 redisChat

127.0.0.1:6379> subscribe redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1

打开另一个redis客户端,在同一个频道redisChat发送消息,订阅者就能收到消息

127.0.0.1:6379> publish redisChat "java is a best language"
(integer) 1

接收端:

127.0.0.1:6379> subscribe redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"
3) "java is a best language"

redis发布订阅常用命令

命令描述
subscribe [pattern, pattern ,…]订阅一个或多个频道
publish [channel] [message]将信息发送到指定频道
psubscribe [pattern, pattern ,…]订阅一个或多个符合给定模式的频道
punsubscribe [pattern, pattern …]退订所有给定模式的频道
pubsub subcommand [argument ,argument …]查看订阅与发布系统状态
UNSUBSCRIBE [channel ,channel …]指退订给定的频道

8. Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。

  • 命令入队。

  • 执行事务。

实例

以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379> MULTI
OK 

redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUED 

redis 127.0.0.1:6379> GET book-name
QUEUED 

redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUED 

redis 127.0.0.1:6379> SMEMBERS tag
QUEUED 

redis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"   
   2) "C++"   
   3) "Programming"

redis事务常用命令

命令描述
discard取消事务,放弃执行事务块内的所有命令。
exec执行所有事务块内的命令
multi标记一个事务块的开始
unwatch取消 WATCH 命令对所有 key 的监视
watch [key , key …]监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

9. java操作redis

使用jedis操作redis

    public static void main( String[] args )
    {
        // 获取连接
        Jedis jedis = new Jedis("localhost", 6379);

        // 执行指令
        jedis.set("username","xiaoming");

        // 关闭连接
        jedis.close();

    }

使用spring data jedis 操作redis

application.yml 配置redis

spring:
  redis:
    host: localhost      # IP
    port: 6379           # 端口号
    passwird: 123456     # 密码
    database: 0          # 操作的数据库
    jedis:
      # redis连接池配置
      pool:
        max-active: 8    # 最大连接数
        max-wait: 1ms    # 连接池最大阻塞等待时间
        max-idle: 4      # 连接池中最大空闲连接
        min-idle: 0      # 连接池中最小空闲连接

更多资源查看我的个人博客 <—