redis使用基础(一)

简介:开源免费,高性能key-value型,非关系型数据库。

特点:持久化(将内存中的数据加载到磁盘中,重启时可以再次加载并使用)

        数据备份(master-slave模式数据备份)

相对于关系型数据库的优势:

性能极高:每秒可读数据110000次/s,写速度81000次/s。

丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子性:无论单个,还是多个,要么执行成功,要么全部失败。事务性通过MULTI和EXEC指令包起来。

丰富的特性 :Redis还支持 publish/subscribe, 通知, key 过期等等特性

基本的数据结构(5类):

  • String: 字符串   最大存储512M
  • Hash: 散列
  • List: 列表
  • Set: 集合
  • Sorted Set: 有序集合

1、查看基本信息

INFO

2、查看缓存键

keys  *

3、查看key的类型

type yourkey

redis配置:获取所有配置项(config get *)

                   编辑配置项(config set 配置名  新名字)

string存储

127.0.0.1:6379> set name "baomei"
OK
127.0.0.1:6379> get name
"baomei"
127.0.0.1:6379>strlen name     返回字符串长度,不存在的key长度为0
6
127.0.0.1:6379> set name 10
OK
127.0.0.1:6379> decr name       将数字长度减一
(integer) 9
127.0.0.1:6379> exists count     对不存在的key减一结果为-1
(integer) 0
127.0.0.1:6379> decr count
(integer) -1
127.0.0.1:6379> append name 000     在字符串末尾追加指定字符串
(integer) 4
127.0.0.1:6379> get name
"9000"
127.0.0.1:6379> decrby name 1000      减去指定长度的值
(integer) 8000
127.0.0.1:6379> incr name            将数字加一
(integer) 8001
127.0.0.1:6379> MSET key1 "Hello" key2 "World"    同时存放多个键值对
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
"World"

hash存储,每个 hash 可以存储 2^32 -1 键值对(40多亿) -----hmset   hget

127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> hmset name filed1 "baomei1" filed2 "baomei2"
OK
127.0.0.1:6379> hget filed1
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget name filed1
"baomei1"
127.0.0.1:6379> hget name filed2
"baomei2"
127.0.0.1:6379>hdel name filed1          删除hash中的某一字段值
(integer) 1

列表存储,支持添加重复元素。按插入顺序排序,也可以插入一个数到某个元素的前面或者后面,注意,redis的列表存储类似于数据结构栈模型。

列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)

127.0.0.1:6379> del name           删除键
(integer) 1
127.0.0.1:6379> lpush name redis      向列表中存值
(integer) 1
127.0.0.1:6379> lpush name mysql
(integer) 2
127.0.0.1:6379> lpush name mongdb
(integer) 3
127.0.0.1:6379> lrange name 0 10         遍历输出列表
1) "mongdb"
2) "mysql"
3) "redis" 
127.0.0.1:6379> llen name              求列表长度
(integer) 3
127.0.0.1:6379> lindex name 0           求列表中0号角标的元素值
"mongdb"
127.0.0.1:6379> lindex name 1
"mysql"
127.0.0.1:6379> linsert name before  mysql baomei     在某元素位置前插入元素
(integer) 4
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange name 0 -1
1) "mongdb"
2) "baomei"
3) "mysql"
4) "redis"
127.0.0.1:6379> lpop name              删除最左边元素,最后插入的一方为左边
"mongdb"
127.0.0.1:6379> lrange name 0 -1
1) "baomei"
2) "mysql"
3) "redis"
127.0.0.1:6379> rpop name             删除最右边元素
"redis"
127.0.0.1:6379> lrange name 0 -1
1) "baomei"
2) "mysql"
127.0.0.1:6379> lpush name oracle
(integer) 3
127.0.0.1:6379> lrem  name 1 oracle          删除元素
(integer) 1
127.0.0.1:6379> lrange 0 -1
(error) ERR wrong number of arguments for 'lrange' command
127.0.0.1:6379> lrange name 0 -1
1) "baomei"
2) "mysql"
127.0.0.1:6379> rpush name baomei
(integer) 3
127.0.0.1:6379> lrem name 2 baomei          删除多个
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "mysql"
127.0.0.1:6379>

 

set集合,Set 是 string 类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

 

添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0,不支持添加重复元素

127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> sadd name redis
(integer) 1
127.0.0.1:6379> sadd name mysql
(integer) 1
127.0.0.1:6379> sadd name oracle
(integer) 1
127.0.0.1:6379> sadd name oracle
(integer) 0
127.0.0.1:6379> smembers name
1) "mysql"
2) "oracle"
3) "redis"
127.0.0.1:6379>

 

zset有序集合,Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> zadd name 0 redis
(integer) 1
127.0.0.1:6379> zadd name 0 mysql
(integer) 1
127.0.0.1:6379> zadd name 0 oracle
(integer) 1
127.0.0.1:6379> zadd name 1 baomei
(integer) 1
127.0.0.1:6379> zadd name 1 mysql
(integer) 0
127.0.0.1:6379> zadd name 1 baojuan
(integer) 1
127.0.0.1:6379> zrangebyscore name 0 10
1) "oracle"
2) "redis"
3) "baojuan"
4) "baomei"
5) "mysql"
127.0.0.1:6379> zrangebyscore name 1 10
1) "baojuan"
2) "baomei"
3) "mysql"
127.0.0.1:6379> zrangebyscore name 2 10
(empty list or set)
127.0.0.1:6379>

 

  redis消息订阅系统,右边为发送者,左边为订阅者。

        redis事务机制不具有原子性,   如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

 redis脚本使用

127.0.0.1:6379>  EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

 

posted @ 2019-10-28 18:45  宝娟  阅读(215)  评论(0编辑  收藏  举报