Redis(一)

来源:互联网 发布:智能自动化 编程技术 编辑:程序博客网 时间:2024/06/11 04:32

一.NOSQL简介

NoSQL,泛指关系型数据库,NoSQL数据库分为四大类:
键值(Key-Value)存储数据库:这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。如Redis,Voldemort,Oracle BDB
列存储数据库:通常用来应对分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。如Hbase,Riak
文档性数据库:模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON,如:CouchDB,MongoDB
图形数据库:使用灵活的图形模型,并且能够扩展到多个服务器上

二.非关系型数据的特点

  1. 数据模型比较简单
  2. 需要灵活性更强的IT系统
  3. 对数据库性能要求较高
  4. 不需要高度的数据一致性
  5. 对于给定的key,比较容易映射复杂值得环境

三.关于Redis(内存级别)

优点:对数据高并发读取、对海量数据的高效率存储和访问、对数据的可扩展性和高可用性
缺点:redis(ACID处理非常简单)、无法做到太复杂的关系数据库模型
Redis是以key-value store存储,data structure service 数据结构服务器,键可以是包含:(string)字符串,哈希,(list)链表,(set)集合,(zset)有序集合。这些数据集合都支持push/pop,add/remove及取交集并集以及更丰富的操作,redis支持各种不同的方式排序,为了保证效率,数据都是缓存在内存当中,他也可以周期性把更新的数据写入磁盘或者把修改操作写入追加到文件里。(RDB,AOF)

四.Redis使用

进入redis的cli

/usr/local/redis/bin/redis-cli
127.0.0.1:6379> KEYS *(empty list or set)127.0.0.1:6379> 
# SET后跟 key-value 这里 key -> name  value -> Hello127.0.0.1:6379> SET name HelloOK# 可以用GET去获取设定的值127.0.0.1:6379> GET name"Hello"127.0.0.1:6379> 

停止cli端: quit
停止Redis服务:/usr/local/redis/bin/redis-cli shutdown

五.Redis基本数据类型

(1)字符串

Redis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。
示例:

redis 127.0.0.1:6379> set name "1111111111111" OK redis 127.0.0.1:6379> get name "1111111111111"

在上面的示例中,setget是Redis命令,name是Redis中使用的键,1111111111111是存储在Redis中的字符串的值。

注 - Redis命令不区分大小写,如SET,Setset都是同一个命令。字符串值的最大长度为 512MB。
一些其他的命令:
del 删除key
setnx 如果存在就不进行设置了
setex 设置过期时间,过期后返回nil
setrange 替换字符串,从第几位开始替换
mset mget 一次性设置个多个值和获取多个值
incr decr 对某一个值进行递增 或 递减
incrby decrby 指定长度的递增或递减
append [name] 字符串追加
strlen [name] 获取字符串长度

(2).散列/哈希

Redis散列/哈希(Hashes)是键值对的集合。Redis散列/哈希是字符串字段和字符串值之间的映射。因此,它们用于表示对象。
示例:

redis 127.0.0.1:6379> HSET myhash username "kaka"redis 127.0.0.1:6379> HGET myhash username

myhash 是Hash名字
username 是key "kaka" 是 value
一些其他的方法:
hmset hmget 批量存储多个键值对
同样也有hsetnx 这个和setnx 大同小异
hincrby hdecrby 集合的递增 递减
hexists是否存在key,如果存在返回,不存在返回0
hlen 返回所有的键数值
hdel 删除指定的hash的field
hkeys返回hash里的所有字段
hvals 返回所有的value
hgetall 返回所有的key和value

(3)列表

Redis列表只是字符串列表,按插入顺序排序。可以向Redis列表的头部或尾部添加元素。

常用的方法:
lpush 从头部加入元素(栈)先进后出
rpush 从尾部加入元素(队列) 先进先出
linsert 插入元素
lrange 查看这个list中的元素 例如:lrange list1 0 -1
lset 将指定下标的元素替换掉
lrem 删除元素,返回元素个数

(4)集合set

Redis集合是字符串的无序集合。在Redis中,可以添加,删除和测试成员存在的时间O(1)复杂性。

(5)可排序集合zset

Redis可排序集合类似于Redis集合,是不重复的字符集合。 不同之处在于,排序集合的每个成员都与分数相关联,这个分数用于按最小分数到最大分数来排序的排序集合。虽然成员是唯一的,但分数值可以重复。