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.1 概述

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

1.2 特点

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

1.3 应用场景

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

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

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也可以当作一个消息缓存服务器,通过订阅和发布的方式传递消息。

类型简介命令String它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M。GET/MGETSET/SETEX/MSET/MSETNXINCR/DECRGETSETDELHash该类型是由field和关联的value组成的map。其中,field和value都是字符串类型的。HGET/HMGET/HGETALLHSET/HMSET/HSETNXHEXISTS/HLENHKEYS/HDELHVALSList该类型是一个插入顺序排序的字符串元素集合, 基于双链表实现。LPUSH/LPUSHX/LPOP/RPUSH/RPUSHX/RPOP/LINSERT/LSETLINDEX/LRANGELLEN/LTRIMSetSet类型是一种无顺序集合, 它和List类型最大的区别是:集合中的元素没有顺序, 且元素是唯一的。底层是通过哈希表实现的。SADD/SPOP/SMOVE/SCARDSINTER/SDIFF/SDIFFSTORE/SUNIONSorted setZSet是一种有序集合类型,每个元素都会关联一个double类型的分数权值,通过这个权值来为集合中的成员进行从小到大的排序。与Set类型一样,其底层也是通过哈希表实现的ZADD/ZPOP/ZMOVE/ZCARD/ZCOUNTZINTER/ZDIFF/ZDIFFSTORE/ZUNION

3 redis命令行操作

3.1 服务器操作

(1)启动redis

1sudo service redis-server start

(2)连接上redis-server

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

3.2 String字符串操作

(1)添加

123set key value 如:set username xiaotuo

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

(2)删除

123del key如:del username

(3) 设置过期时间

1expire key timeout(单位为秒)

(4)查看过期时间

123ttl key如:ttl username

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

1keys *

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的这个元素。获取列表中的元素个数123llen key如:llen languages删除指定的元素123lrem key count value如:lrem languages 0 php

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

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

3.4 set集合的操作

123sadd set value1 value2....如:sadd team xiaotuo datuo查看元素123smembeers set如:smembers team移除元素123srem set member...如:srem team xiaotuo datuo查看集合中的元素个数123scard set如:scard team1获取多个集合的交集123sinter set1 set2如:sinter team1 team2获取多个集合的并集123sunion set1 set2如:sunion team1 team2获取多个集合的差集123sdiff set1 set2如:sdiff team1 team2

3.5 hash哈希操作

添加一个新值123hset key field value如:hset website baidu http://baidu.com

  将哈希表key中的域field的值设为value。

如果key不存在,一个新的哈希表被创建并进行 HSET操作。如果域 field已经存在于哈希表中,旧值将被覆盖。获取哈希中的field对应的值123hget key field如:hget website baidu删除field中的某个field123hdel key field如:hdel website baidu获取某个哈希中所有的field和value123hgetall key如:hgetall website获取某个哈希中所有的field123hkeys key如:hkeys website获取某个哈希中所有的值123hvals key如:hvals website判断哈希中是否存在某个field123hexists key field如:hexists website baidu获取哈希中总共的键值对123hlen field如:hlen website

3.6 发布/订阅操作

给某个频道发布消息1publish channel message订阅某个频道的消息1subscribe channel

4 redis代码实例

4.1 Python 操作 redis代码实例

安装python-redis:pip install redis新建一个文件比如redis_test.py,然后初始化一个redis实例变量,并且在ubuntu虚拟机中开启redis。比如虚拟机的ip地址为192.168.174.130。示例代码如下:1234# 从redis包中导入Redis类from redis import Redis# 初始化redis实例变量xtredis = Redis(host=192.168.174.130,port=6379)对字符串的操作:操作redis的方法名称,跟之前使用redis-cli一样,现就一些常用的来做个简单介绍,示例代码如下(承接以上的代码)1234567891011# 添加一个值进去,并且设置过期时间为60秒,如果不设置,则永远不会过期xtredis.set(username,xiaotuo,ex=60)# 获取一个值xtredis.get(username)# 删除一个值xtredis.delete(username)# 给某个值自增1xtredis.set(read_count,1)xtredis.incr(read_count) # 这时候read_count变为2# 给某个值减少1xtredis.decr(read_count) # 这时候read_count变为1对列表的操作:同字符串操作,所有方法的名称跟使用redis-cli操作是一样的:12345678910# 给languages这个列表往左边添加一个pythonxtredis.lpush(languages,python)# 给languages这个列表往左边添加一个phpxtredis.lpush(languages,php)# 给languages这个列表往左边添加一个javascriptxtredis.lpush(languages,javascript)# 获取languages这个列表中的所有值print xtredis.lrange(languages,0,-1)> [javascript,php,python]对集合的操作:12345678910# 给集合team添加一个元素xiaotuoxtredis.sadd(team,xiaotuo)# 给集合team添加一个元素datuoxtredis.sadd(team,datuo)# 给集合team添加一个元素slicextredis.sadd(team,slice)# 获取集合中的所有元素xtredis.smembers(team)> [datuo,xiaotuo,slice] # 无序的对哈希(hash)的操作:12345678# 给website这个哈希中添加baiduxtredis.hset(website,baidu,baidu.com)# 给website这个哈希中添加googlextredis.hset(website,google,google.com)# 获取website这个哈希中的所有值print xtredis.hgetall(website)> {"baidu":"http://baidu.com","google":"http://google.com"}事务(管道)操作:redis支持事务操作,也即一些操作只有统一完成,才能算完成。否则都执行失败,用python操作redis也是非常简单,示例代码如下:12345678# 定义一个管道实例pip = xtredis.pipeline()# 做第一步操作,给BankA自增长1pip.incr(BankA)# 做第二步操作,给BankB自减少1pip.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