redis详细介绍附实例代码--看一篇就够了 1       简介 2       Redis的数据类型及主要特性 3       redis命令行操作 4       redis代码实例

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

https://www.cnblogs.com/bclshuai/p/11380657.html

redis介绍详解附实例代码--看一篇就够了

 

目录

1      简介... 1

1.1     概述... 1

1.2     特点... 1

1.3     应用场景... 2

2      Redis的数据类型及主要特性... 2

3      redis命令行操作... 3

3.1     服务器操作... 3

3.2     String字符串操作... 4

3.3     列表操作... 4

3.4     set集合的操作... 6

3.5     hash哈希操作... 7

3.6     发布/订阅操作... 8

4      redis代码实例... 9

4.1     Python 操作 redis代码实例... 9

4.2     java代码实例... 11

1.1  概述

redis是基于内存的数据库,redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。用于高并发、快速访问的应用场景。因为关系型数据的瓶颈一般是在磁盘的I/O上。

1.2  特点

  • 高并发:基于内存运行,性能高效,支持高并发。
  • 分布式:支持分布式,理论上可以无限扩展
  • 类型丰富:key-value存储系统,支持多种数据类型
  • 通用化:开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
  • 可持久化,可以将内存中的数据定时同步到磁盘中。

1.3  应用场景

(1)    消息缓存服务器,通过订阅和发布的方式传递消息。

(2)    内存数据库,存储一些需要快速访问的数据,低延时高并发。缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。

 redis详细介绍附实例代码--看一篇就够了
1       简介
2       Redis的数据类型及主要特性
3       redis命令行操作
4      
redis代码实例

2       Redis的数据类型及主要特性

Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:String类型、哈希map类型、list列表类型、set集合类型和zset顺序集合类型。redis是一个服务,打开cmd,通过redis-cli.exe -h 127.0.0.1 -p 6379命令连接服务器,然后通过命令行命令往redis内写数据和读数据。

redis可以作为一个内存数据库。redis也可以当作一个消息缓存服务器,通过订阅和发布的方式传递消息。

redis详细介绍附实例代码--看一篇就够了
1       简介
2       Redis的数据类型及主要特性
3       redis命令行操作
4      
redis代码实例

类型

简介

命令

String

它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M。

  • GET/MGET
  • SET/SETEX/MSET/MSETNX
  • INCR/DECR
  • GETSET
  • DEL

Hash

该类型是由field和关联的value组成的map。其中,field和value都是字符串类型的。

  • HGET/HMGET/HGETALL
  • HSET/HMSET/HSETNX
  • HEXISTS/HLEN
  • HKEYS/HDEL
  • HVALS

List

该类型是一个插入顺序排序的字符串元素集合, 基于双链表实现。

  • LPUSH/LPUSHX/LPOP/RPUSH
  • /RPUSHX/RPOP/LINSERT/LSET
  • LINDEX/LRANGE
  • LLEN/LTRIM

Set

Set类型是一种无顺序集合, 它和List类型最大的区别是:集合中的元素没有顺序, 且元素是唯一的。底层是通过哈希表实现的。

  • SADD/SPOP/SMOVE/SCARD
  • SINTER/SDIFF
  • /SDIFFSTORE/SUNION

Sorted set

ZSet是一种有序集合类型,每个元素都会关联一个double类型的分数权值,通过这个权值来为集合中的成员进行从小到大的排序。与Set类型一样,其底层也是通过哈希表实现的

  • ZADD/ZPOP/ZMOVE/
  • ZCARD/ZCOUNT
  • ZINTER/ZDIFF/
  • ZDIFFSTORE/ZUNION

3       redis命令行操作

3.1  服务器操作

(1)启动redis

1

sudo service redis-server start

(2)连接上redis-server

1

redis-cli -h [ip] -p [端口]

 

3.2  String字符串操作

(1)添加

1

2

3

set key value

  如:

set username xiaotuo

  将字符串值value关联到key。如果key已经持有其他值,set命令就覆写旧值,无视其类型。并且默认的过期时间是永久,即永远不会过期。

(2)删除

1

2

3

del key

如:

del username

(3) 设置过期时间

1

expire key timeout(单位为秒)

(4)查看过期时间

1

2

3

ttl key

如:

ttl username

(5)查看当前redis中的所有key

1

keys *

3.3  列表操作

(1)在列表左边添加元素:lpush key value

  • 将值value插入到列表key的表头。如果key不存在,一个空列表会被创建并执行lpush操作。当key存在但不是列表类型时,将返回一个错误。

(2)在列表右边添加元素:rpush key value

  • 将值value插入到列表key的表尾。如果key不存在,一个空列表会被创建并执行RPUSH操作。当key存在但不是列表类型时,返回一个错误。

(3)查看列表中的元素:lrange key start stop

  • 返回列表key中指定区间内的元素,区间以偏移量start和stop指定,如果要左边的第一个到最后的一个lrange key 0 -1。

(4)移除列表中的元素

  • 移除并返回列表key的头元素:lpop key
  • 移除并返回列表的尾元素:rpop key
  • 移除并返回列表key的中间元素:lrem key count value
    • 将删除key这个列表中,count个值为value的元素

(5)指定返回第几个元素:lindex key index

  • 将返回key这个列表中,索引为index的这个元素。
  • 获取列表中的元素个数

1

2

3

llen key

如:

llen languages

  • 删除指定的元素

1

2

3

lrem key count value

如:

lrem languages 0 php

  根据参数 count 的值,移除列表中与参数 value 相等的元素。count的值可以是以下几种

  •  
  • count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count
  • count < 0:从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值
  • count = 0:移除表中所有与value 相等的值
  • 添加元素

3.4  set集合的操作 

1

2

3

sadd set value1 value2....

如:

sadd team xiaotuo datuo

  • 查看元素

1

2

3

smembeers set

如:

smembers team

  • 移除元素

1

2

3

srem set member...

如:

srem team xiaotuo datuo

  • 查看集合中的元素个数

1

2

3

scard set

如:

scard team1

  • 获取多个集合的交集

1

2

3

sinter set1 set2

如:

sinter team1 team2

  • 获取多个集合的并集

1

2

3

sunion set1 set2

如:

sunion team1 team2

  • 获取多个集合的差集

1

2

3

sdiff set1 set2

如:

sdiff team1 team2

3.5  hash哈希操作 

  • 添加一个新值

1

2

3

hset key field value

如:

hset website baidu baidu.com

  将哈希表key中的域field的值设为value。
如果key不存在,一个新的哈希表被创建并进行 HSET操作。如果域 field已经存在于哈希表中,旧值将被覆盖。

  • 获取哈希中的field对应的值

1

2

3

hget key field

如:

hget website baidu

  • 删除field中的某个field

1

2

3

hdel key field

如:

hdel website baidu

  • 获取某个哈希中所有的field和value

1

2

3

hgetall key

如:

hgetall website

  • 获取某个哈希中所有的field

1

2

3

hkeys key

如:

hkeys website

  • 获取某个哈希中所有的值

1

2

3

hvals key

如:

hvals website

  • 判断哈希中是否存在某个field

1

2

3

hexists key field

如:

hexists website baidu

  • 获取哈希中总共的键值对

1

2

3

hlen field

如:

hlen website

3.6   发布/订阅操作

  • 给某个频道发布消息

1

publish channel message

  • 订阅某个频道的消息

1

subscribe channel

4       redis代码实例

4.1  Python 操作 redis代码实例

  • 安装python-redis:pip install redis
  • 新建一个文件比如redis_test.py,然后初始化一个redis实例变量,并且在ubuntu虚拟机中开启redis。比如虚拟机的ip地址为192.168.174.130。示例代码如下:

1

2

3

4

# 从redis包中导入Redis类

from redis import Redis

# 初始化redis实例变量

xtredis = Redis(host='192.168.174.130',port=6379)

  • 对字符串的操作:操作redis的方法名称,跟之前使用redis-cli一样,现就一些常用的来做个简单介绍,示例代码如下(承接以上的代码)

1

2

3

4

5

6

7

8

9

10

11

# 添加一个值进去,并且设置过期时间为60秒,如果不设置,则永远不会过期

xtredis.set('username','xiaotuo',ex=60)

# 获取一个值

xtredis.get('username')

# 删除一个值

xtredis.delete('username')

# 给某个值自增1

xtredis.set('read_count',1)

xtredis.incr('read_count')  # 这时候read_count变为2

# 给某个值减少1

xtredis.decr('read_count') # 这时候read_count变为1

  • 对列表的操作:同字符串操作,所有方法的名称跟使用redis-cli操作是一样的:

1

2

3

4

5

6

7

8

9

10

# 给languages这个列表往左边添加一个python

xtredis.lpush('languages','python')

# 给languages这个列表往左边添加一个php

xtredis.lpush('languages','php')

# 给languages这个列表往左边添加一个javascript

xtredis.lpush('languages','javascript')

# 获取languages这个列表中的所有值

print xtredis.lrange('languages',0,-1)

> ['javascript','php','python']

  • 对集合的操作:

1

2

3

4

5

6

7

8

9

10

# 给集合team添加一个元素xiaotuo

xtredis.sadd('team','xiaotuo')

# 给集合team添加一个元素datuo

xtredis.sadd('team','datuo')

# 给集合team添加一个元素slice

xtredis.sadd('team','slice')

# 获取集合中的所有元素

xtredis.smembers('team')

> ['datuo','xiaotuo','slice'] # 无序的

  • 对哈希(hash)的操作:

1

2

3

4

5

6

7

8

# 给website这个哈希中添加baidu

xtredis.hset('website','baidu','baidu.com')

# 给website这个哈希中添加google

xtredis.hset('website','google','google.com')

# 获取website这个哈希中的所有值

print xtredis.hgetall('website')

> {"baidu":"baidu.com","google":"google.com"}

  • 事务(管道)操作:redis支持事务操作,也即一些操作只有统一完成,才能算完成。否则都执行失败,用python操作redis也是非常简单,示例代码如下:

1

2

3

4

5

6

7

8

# 定义一个管道实例

pip = xtredis.pipeline()

# 做第一步操作,给BankA自增长1

pip.incr('BankA')

# 做第二步操作,给BankB自减少1

pip.desc('BankB')

# 执行事务

pip.execute()

4.2  java代码实例

https://www.jianshu.com/p/5596c3a4978d

参考文献

https://www.cnblogs.com/renshaoqi/p/10617238.html

https://www.cnblogs.com/powertoolsteam/p/redis.html

https://www.jianshu.com/p/5596c3a4978d