分布式缓存 Redis

什么是nosql 及常见的nosql框架有哪些?

NoSQL(not only sql),泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模(功能特别多)和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题

关系型数据库和非关系型数据库的区别:有表结构的就是关系型数据库。

分布式缓存 Redis

  redis的特点

  • 速度快
  • 写速度能达到:80000/S,读速度100000/秒,基于内存的。使用C语言编写。

  • 数据结构丰富
  • string字符串,hashkey-value,set(集合)zset(有序集合),list(列表)

  • 开发语言丰富

   分布式缓存 Redis

  • 主从复制
  • redis集群的基础就是主从复制,10G/s.

  • 数据持久化
  • memecached基于内存的nosqlnot only sql)数据库,不能够持久化。redis支持数据的持久化(AOF,到期时间,RDB)

安装redis

rpmredhat  package  manager

步骤一:安装最新的redis,需要安装Remi的软件源   官网地址:http://rpms.famillecollet.com.

yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

步骤二:安装redis(默认安装最新版本)

yum --enablerepo=remi install -y  redis

步骤三:启动redis

 分布式缓存 Redis

systemctl redis start        /*启动redis*/

systemctl  redis status    /*查看redis状态*/

systemctl  redis stop       /*停止redis*/

步骤四:查看redis版本号

redis-cli --version

分布式缓存 Redis

步骤五:设置redis开机自启

systemctl enable redis.service

默认yum安装之后,redis的配置文件在/etc/redis.conf

    vim redis.conf

              daemonize  yes  // 222

127.0.0.1  192.168.11.100  //69

redis常用命令

进入redis的命令行

redis-cli -h 127.0.0.1 -p 6379  

-h ip地址

-p 端口号,默认是6379

修改redis的配置文件,允许其他机器访问。

修改/etc/redis.conf 61

修改/etc/redis.conf222行,daemonize  yes  // 222

分布式缓存 Redis

redis的数据结构

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

1) String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。 

分布式缓存 Redis

 set  key  value ex  seconds   (expire过期时间)

2) Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。类似于java语言中的map

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象

分布式缓存 Redis

示例中的qy93hash是hash的key名称,classname为属性名,qy93为name属性值

3) List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

将aaa保存到list中,list的名称叫作mylist

192.168.153.160:6379> rpush mylist aaa

(integer) 1          /*插入成功*/

192.168.153.160:6379> rpush mylist bbb

(integer) 2

获取list中下标为0的值

192.168.153.160:6379> LINDEX mylist 0

"aaa"

192.168.153.160:6379> LINDEX mylist 1

"bbb"

192.168.153.160:6379> LINDEX mylist 2

"ccc"

192.168.153.160:6379> LINDEX mylist 3

(nil)

获取list中所有的值

192.168.153.160:6379> LRANGE mylist 0 -1

1) "aaa"

2) "bbb"

3) "ccc"

192.168.153.160:6379> LRANGE mylist 0 2

1) "aaa"

2) "bbb"

3) "ccc"

192.168.153.160:6379> LINDEX mylist -1

"ccc"

LPUSH在list左边追加

192.168.153.160:6379> LPUSH mylist ddd

(integer) 4

192.168.153.160:6379> LRANGE mylist 0 -1

1) "ddd"

2) "aaa"

3) "bbb"

4) "ccc"

lpush 左侧添加  rpush右侧添加  lpop 左侧删除  rpop 右侧删除

4) Set(集合)

Redis的Set是string类型的无序集合

set中添加值 sadd  “set的key”“set 的值”

查看所有的值:smembers setName

删除某个值:srem valuename

获取集合中的元素个数:scard  setName

 分布式缓存 Redis

5) zset(sorted set:有序集合)

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

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

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

添加元素到集合,元素在集合中存在则更新对应score

分布式缓存 Redis

示例中的myzset为set的key名,0 到1000指的是score在0到1000之间的值

6) 地理空间(geospatial

http://news.cntrades.com/show-186844.html

添加4个城市:

   geoadd china  116.41667 39.91667 bj 121.43333 34.50000 sh 117.20000 39.13333 tj  113.65000 34.76667 zz 114.06667 22.61667 sz

返回两个城市的直线距离(默认单位为米,可以使用km)

   geodist china  zz sz

返回113.65 34.76经纬度为中心,800公里之内的城市,滴滴打车

   georadius china 113.65 34.76  800 km

返回指定城市的经纬度

   geopos china sz zz